Как получить текст сообщения из ActiveMqMessage

Я новичок в Apache ActiveMQ. От производителя я отправляю следующий контент:

{"senderPhNumber":"9986085716","sendingTime":"2015-07-20T22:11:24","spCode":"000001","customerName":"Vinod"}

Код от производителя

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

// Tell the producer to send the message
System.out.println("Sent message: " + text );
producer.send(message);

От 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();
        }
    }
}

Если я распечатаю сообщение, оно будет напечатано, как показано ниже

  

Получено: ActiveMQMessage {commandId = 0, responseRequired = false,   messageId = ID: AtulGupta-PC-50395-1437403689355-1: 1: 0: 0: 13,   originalDestination = null, originalTransactionId = null, providerId =   ID: AtulGupta-PC-50395-1437403689355-1: 1: 0: 0, пункт назначения =   topic: //ActiveMQ.Advisory.MessageDelivered.Topic.atul, TransactionsId =   null, срок действия = 0, отметка времени = 0, прибытие = 0, brokerInTime =   1437403796470, brokerOutTime = 1437403796470, correlationId = null,   replyTo = null, persistent = false, type = Advisory, priority = 0,   groupID = null, groupSequence = 0, targetConsumerId = null, сжатый   = false, userID = null, content = null, marshalledProperties = [email protected], dataStructure =   ActiveMQTextMessage {commandId = 5, responseRequired = false,   messageId = ID: AtulGupta-PC-50417-1437403787762-3: 1: 1: 1: 1,   originalDestination = null, originalTransactionId = null, providerId =   ID: AtulGupta-PC-50417-1437403787762-3: 1: 1: 1, пункт назначения =   topic: //atul, TransactionsId = null, expiration = 0, отметка времени =   1437403796468, прибытие = 0, brokerInTime = 1437403796470,   brokerOutTime = 0, correlationId = ноль, replyTo = ноль, постоянный =   ложь, тип = ноль, приоритет = 4, groupID = ноль, groupSequence = 0,   targetConsumerId = null, сжатый = false, userID = null, content =   null, marshalledProperties = null, dataStructure = null,   redeliveryCounter = 0, размер = 0, свойства = null, readOnlyProperties   = false, readOnlyBody = false, droppable = false, jmsXGroupFirstForConsumer = false, text = null}, redeliveryCounter =   0, размер = 0, свойства =   {OriginBrokerId = ID: AtulGupta-PC-50395-1437403689355-0: 1,   orignalDestination = ID: AtulGupta-PC-50417-1437403787762-3: 1: 1: 1: 1,   originBrokerName = локальный,   orignalMessageId = ID: AtulGupta-PC-50417-1437403787762-3: 1: 1: 1: 1,   originBrokerURL = tcp: //AtulGupta-PC: 61616}, readOnlyProperties = true,   readOnlyBody = true, droppable = false, jmsXGroupFirstForConsumer =   ложь}

Как получить фактическое содержание сообщения?

4 голоса | спросил Vinod Jayachandran 20 J000000Monday15 2015, 19:51:36

2 ответа


0

Я знаю, что это старо, но вот что я делаю (по существу). Смысл в том, чтобы привести к 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();
}
ответил Nenotlep 3 42016vEurope/Moscow11bEurope/MoscowThu, 03 Nov 2016 15:04:43 +0300 2016, 15:04:43
0

Вы пытались привести сообщение к TextMessage, а затем получить сообщение с помощью API getText ().

Вы можете сослаться на код ниже в ссылке: http://activemq.apache.org/hello-world.html

ответил Mayank Agarwal 20 J000000Monday15 2015, 20:40:25

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132