Search in sources :

Example 1 with JmsBaseTopic

use of org.apache.rocketmq.jms.domain.JmsBaseTopic in project rocketmq-externals by apache.

the class MessageConverter method convert2RMQMessage.

public static Message convert2RMQMessage(JmsBaseMessage jmsMsg) throws Exception {
    Message rocketmqMsg = new MessageExt();
    // 1. Transform message body
    rocketmqMsg.setBody(MessageConverter.getContentFromJms(jmsMsg));
    // 2. Transform topic and messageType
    JmsBaseTopic destination = (JmsBaseTopic) jmsMsg.getHeaders().get(JmsBaseConstant.JMS_DESTINATION);
    String topic = destination.getMessageTopic();
    rocketmqMsg.setTopic(topic);
    String messageType = destination.getMessageType();
    Preconditions.checkState(!messageType.contains("||"), "'||' can not be in the destination when sending a message");
    rocketmqMsg.setTags(messageType);
    // 3. Transform message properties
    Properties properties = initRocketMQHeaders(jmsMsg, topic, messageType);
    for (String name : properties.stringPropertyNames()) {
        String value = properties.getProperty(name);
        if (MessageConst.PROPERTY_KEYS.equals(name)) {
            rocketmqMsg.setKeys(value);
        } else if (MessageConst.PROPERTY_TAGS.equals(name)) {
            rocketmqMsg.setTags(value);
        } else if (MessageConst.PROPERTY_DELAY_TIME_LEVEL.equals(name)) {
            rocketmqMsg.setDelayTimeLevel(Integer.parseInt(value));
        } else if (MessageConst.PROPERTY_WAIT_STORE_MSG_OK.equals(name)) {
            rocketmqMsg.setWaitStoreMsgOK(Boolean.parseBoolean(value));
        } else if (MessageConst.PROPERTY_BUYER_ID.equals(name)) {
            rocketmqMsg.setBuyerId(value);
        } else {
            rocketmqMsg.putUserProperty(name, value);
        }
    }
    return rocketmqMsg;
}
Also used : MessageExt(org.apache.rocketmq.common.message.MessageExt) JmsObjectMessage(org.apache.rocketmq.jms.domain.message.JmsObjectMessage) JmsBytesMessage(org.apache.rocketmq.jms.domain.message.JmsBytesMessage) Message(org.apache.rocketmq.common.message.Message) JmsTextMessage(org.apache.rocketmq.jms.domain.message.JmsTextMessage) TextMessage(javax.jms.TextMessage) ObjectMessage(javax.jms.ObjectMessage) BytesMessage(javax.jms.BytesMessage) JmsBaseMessage(org.apache.rocketmq.jms.domain.message.JmsBaseMessage) JmsBaseTopic(org.apache.rocketmq.jms.domain.JmsBaseTopic) Properties(java.util.Properties)

Example 2 with JmsBaseTopic

use of org.apache.rocketmq.jms.domain.JmsBaseTopic in project rocketmq-externals by apache.

the class MessageConverter method convert2JMSMessage.

public static JmsBaseMessage convert2JMSMessage(MessageExt msg) throws Exception {
    JmsBaseMessage message;
    if (MsgConvertUtil.MSGMODEL_BYTES.equals(msg.getUserProperty(MsgConvertUtil.JMS_MSGMODEL))) {
        message = new JmsBytesMessage(msg.getBody());
    } else if (MsgConvertUtil.MSGMODEL_OBJ.equals(msg.getUserProperty(MsgConvertUtil.JMS_MSGMODEL))) {
        message = new JmsObjectMessage(MsgConvertUtil.objectDeserialize(msg.getBody()));
    } else if (MsgConvertUtil.MSGMODEL_TEXT.equals(msg.getUserProperty(MsgConvertUtil.JMS_MSGMODEL))) {
        message = new JmsTextMessage(MsgConvertUtil.bytes2String(msg.getBody(), Charsets.UTF_8.toString()));
    } else {
        // rocketmq producer sends bytesMessage without setting JMS_MSGMODEL.
        message = new JmsBytesMessage(msg.getBody());
    }
    // -------------------------set headers-------------------------
    Map<String, Object> properties = new HashMap<String, Object>();
    message.setHeader(JmsBaseConstant.JMS_MESSAGE_ID, "ID:" + msg.getMsgId());
    if (msg.getReconsumeTimes() > 0) {
        message.setHeader(JmsBaseConstant.JMS_REDELIVERED, Boolean.TRUE);
    } else {
        message.setHeader(JmsBaseConstant.JMS_REDELIVERED, Boolean.FALSE);
    }
    Map<String, String> propertiesMap = msg.getProperties();
    if (propertiesMap != null) {
        for (String properName : propertiesMap.keySet()) {
            String properValue = propertiesMap.get(properName);
            if (JmsBaseConstant.JMS_DESTINATION.equals(properName)) {
                String destinationStr = properValue;
                if (null != destinationStr) {
                    List<String> msgTuple = Arrays.asList(destinationStr.split(":"));
                    message.setHeader(JmsBaseConstant.JMS_DESTINATION, new JmsBaseTopic(msgTuple.get(0), msgTuple.get(1)));
                }
            } else if (JmsBaseConstant.JMS_DELIVERY_MODE.equals(properName) || JmsBaseConstant.JMS_PRIORITY.equals(properName)) {
                message.setHeader(properName, properValue);
            } else if (JmsBaseConstant.JMS_TIMESTAMP.equals(properName) || JmsBaseConstant.JMS_EXPIRATION.equals(properName)) {
                message.setHeader(properName, properValue);
            } else if (JmsBaseConstant.JMS_CORRELATION_ID.equals(properName) || JmsBaseConstant.JMS_TYPE.equals(properName)) {
                message.setHeader(properName, properValue);
            } else if (JmsBaseConstant.JMS_MESSAGE_ID.equals(properName) || JmsBaseConstant.JMS_REDELIVERED.equals(properName)) {
                // JMS_MESSAGE_ID should set by msg.getMsgID()
                continue;
            } else {
                properties.put(properName, properValue);
            }
        }
    }
    // Handle System properties, put into header.
    // add what?
    message.setProperties(properties);
    return message;
}
Also used : JmsBytesMessage(org.apache.rocketmq.jms.domain.message.JmsBytesMessage) JmsBaseMessage(org.apache.rocketmq.jms.domain.message.JmsBaseMessage) HashMap(java.util.HashMap) JmsBaseTopic(org.apache.rocketmq.jms.domain.JmsBaseTopic) JmsTextMessage(org.apache.rocketmq.jms.domain.message.JmsTextMessage) JmsObjectMessage(org.apache.rocketmq.jms.domain.message.JmsObjectMessage)

Example 3 with JmsBaseTopic

use of org.apache.rocketmq.jms.domain.JmsBaseTopic in project rocketmq-externals by apache.

the class JmsMessageConvertTest method testCovert2RMQ.

@Test
public void testCovert2RMQ() throws Exception {
    // init jmsBaseMessage
    String topic = "TestTopic";
    String messageType = "TagA";
    JmsBaseMessage jmsBaseMessage = new JmsTextMessage("testText");
    jmsBaseMessage.setHeader(JmsBaseConstant.JMS_DESTINATION, new JmsBaseTopic(topic, messageType));
    jmsBaseMessage.setHeader(JmsBaseConstant.JMS_MESSAGE_ID, "ID:null");
    jmsBaseMessage.setHeader(JmsBaseConstant.JMS_REDELIVERED, Boolean.FALSE);
    jmsBaseMessage.setObjectProperty(MsgConvertUtil.JMS_MSGMODEL, MsgConvertUtil.MSGMODEL_TEXT);
    jmsBaseMessage.setObjectProperty(MsgConvertUtil.MSG_TOPIC, topic);
    jmsBaseMessage.setObjectProperty(MsgConvertUtil.MSG_TYPE, messageType);
    jmsBaseMessage.setObjectProperty(MessageConst.PROPERTY_TAGS, messageType);
    jmsBaseMessage.setObjectProperty(MessageConst.PROPERTY_KEYS, messageType);
    // convert to RMQMessage
    MessageExt message = (MessageExt) MessageConverter.convert2RMQMessage(jmsBaseMessage);
    System.out.println(message);
    // then convert back to jmsBaseMessage
    JmsBaseMessage jmsBaseMessageBack = MessageConverter.convert2JMSMessage(message);
    JmsTextMessage jmsTextMessage = (JmsTextMessage) jmsBaseMessage;
    JmsTextMessage jmsTextMessageBack = (JmsTextMessage) jmsBaseMessageBack;
    Assert.assertEquals(jmsTextMessage.getText(), jmsTextMessageBack.getText());
    Assert.assertEquals(jmsTextMessage.getJMSDestination().toString(), jmsTextMessageBack.getJMSDestination().toString());
    Assert.assertEquals(jmsTextMessage.getJMSMessageID(), jmsTextMessageBack.getJMSMessageID());
    Assert.assertEquals(jmsTextMessage.getJMSRedelivered(), jmsTextMessageBack.getJMSRedelivered());
    Assert.assertEquals(jmsTextMessage.getHeaders().get(MsgConvertUtil.JMS_MSGMODEL), jmsTextMessageBack.getHeaders().get(MsgConvertUtil.JMS_MSGMODEL));
    Assert.assertEquals(jmsTextMessage.getHeaders().get(MsgConvertUtil.MSG_TOPIC), jmsTextMessageBack.getHeaders().get(MsgConvertUtil.MSG_TOPIC));
    Assert.assertEquals(jmsTextMessage.getHeaders().get(MsgConvertUtil.MSG_TYPE), jmsTextMessageBack.getHeaders().get(MsgConvertUtil.MSG_TYPE));
    Assert.assertEquals(jmsTextMessage.getHeaders().get(MessageConst.PROPERTY_TAGS), jmsTextMessageBack.getHeaders().get(MessageConst.PROPERTY_TAGS));
    Assert.assertEquals(jmsTextMessage.getHeaders().get(MessageConst.PROPERTY_KEYS), jmsTextMessageBack.getHeaders().get(MessageConst.PROPERTY_KEYS));
}
Also used : MessageExt(org.apache.rocketmq.common.message.MessageExt) JmsBaseTopic(org.apache.rocketmq.jms.domain.JmsBaseTopic) Test(org.junit.Test)

Aggregations

JmsBaseTopic (org.apache.rocketmq.jms.domain.JmsBaseTopic)3 MessageExt (org.apache.rocketmq.common.message.MessageExt)2 JmsBaseMessage (org.apache.rocketmq.jms.domain.message.JmsBaseMessage)2 JmsBytesMessage (org.apache.rocketmq.jms.domain.message.JmsBytesMessage)2 JmsObjectMessage (org.apache.rocketmq.jms.domain.message.JmsObjectMessage)2 JmsTextMessage (org.apache.rocketmq.jms.domain.message.JmsTextMessage)2 HashMap (java.util.HashMap)1 Properties (java.util.Properties)1 BytesMessage (javax.jms.BytesMessage)1 ObjectMessage (javax.jms.ObjectMessage)1 TextMessage (javax.jms.TextMessage)1 Message (org.apache.rocketmq.common.message.Message)1 Test (org.junit.Test)1