如何从 ActiveMqMessage 获取消息文本

Vin*_*ran 5 java activemq-classic

我是 Apache ActiveMQ 的新手。从 Producer 我发送以下内容:

{"senderPhNumber":"9986085716","sendingTime":"2015-07-20T22:11:24","spCode":"000001","customerName":"Vinod"}
Run Code Online (Sandbox Code Playgroud)

来自生产者的代码

String text = messageStr;
TextMessage message = session.createTextMessage(text);

// Tell the producer to send the message
System.out.println("Sent message: " + text );
producer.send(message);
Run Code Online (Sandbox Code Playgroud)

来自 Consumer 的消息类型为ActiveMqMessage。消费者实现MessageListener和内部onMessage()我有以下代码:

public void onMessage(Message msg) {
    if (msg instanceof ActiveMQMessage){
        System.out.println("Inside If");
        try {
            ActiveMQMessage aMsg =  (ActiveMQMessage)msg;

            System.out.println( " Inside Listener ..." + aMsg);

            ProducerInfo prod = (ProducerInfo) aMsg.getDataStructure();
            consumer.close();
            session.close();
            connection.close();
        } catch (JMSException e) {
            e.printStackTrace();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

如果我打印消息,它会打印如下

收到:ActiveMQMessage {commandId = 0, responseRequired = false, messageId = ID:AtulGupta-PC-50395-1437403689355-1:1:0:0:13, originalDestination = null, originalTransactionId = null, producerId = ID:AtulGupta-PC- 50395-1437403689355-1:1:0:0,目的地=topic://ActiveMQ.Advisory.MessageDelivered.Topic.atul,transactionId=null,过期=0,时间戳=0,到达=0,brokerInTime=1437403796470,brokerOutTime= 1437403796470,correlationId = null,replyTo = null,persistent = false,type = Advisory,priority = 0,groupID = null,groupSequence = 0,targetConsumerId = null,compressed = false,userID = null,content = null,marshalledProperties = org。 apache.activemq.util.ByteSequence@46347456,dataStructure = ActiveMQTextMessage {commandId = 5,responseRequired = false,messageId = ID:AtulGupta-PC-50417-1437403787762-3:1:1:1:1, originalDestination = null, originalTransactionId = null, producerId = ID:AtulGupta-PC-50417-1437403787762-3:1:1:1, destination = topic: //atul,transactionId = null,expiration = 0,timestamp = 1437403796468,arrival = 0,brokerInTime = 1437403796470,brokerOutTime = 0,correlationId = null,replyTo = null,persistent = false,type = null,priority = 4,groupID = null、groupSequence = 0、targetConsumerId = null、compressed = false、userID = null、content = null、marshalledProperties = null、dataStructure = null、redeliveryCounter = 0、size = 0、properties = null、readOnlyProperties = false、readOnlyBody = false、 droppable = false, jmsXGroupFirstForConsumer = false, text = null}, redeliveryCounter = 0, size = 0, properties = {originBrokerId=ID:AtulGupta-PC-50395-1437403689355-0:1,orignalDestination=ID:AtulGupta-PC-50417-1437403787762-3:1:1:1:1, originBrokerName=localhost, orignalMessageId=ID:AtulGupta-PC-50417-1437403787762-3:1,Bro1:1:1:1 tcp://AtulGupta-PC:61616}, readOnlyProperties = true, readOnlyBody = true, droppable = false, jmsXGroupFirstForConsumer = false}

如何检索实际的消息内容?

Nen*_*lep 6

我知道这已经过时了,但这就是我所做的(基本上)。关键是要强制转换为ActiveMQTextMessage- 不ActiveMQMessage

@Override
public void onMessage(Message message) {
    if (message instanceof ActiveMQTextMessage) {
        ActiveMQTextMessage textMessage = (ActiveMQTextMessage) message;
        try {
            handleMessage(textMessage);
        } catch (Exception e) {
            LOG.error("ActiveMQTextMessage handling failed", e);
        }
    } else {
        LOG.error("Message is not a text message " + message.toString());
    }
}

public static void handleMessage(ActiveMQTextMessage message) throws JMSException {
    try {
        String json = message.getText();
        DoSomethingWithJSON(json);
    } catch (Exception e) {
        System.out.println("Could not extract data to log from TextMessage");
        throw e;
    }

    mongoClient.close();
}
Run Code Online (Sandbox Code Playgroud)


小智 1

您是否尝试过将消息转换为 TextMessage,然后使用 getText() API 获取消息。

您可以参考以下链接中的代码: http://activemq.apache.org/hello-world.html