在activemq中接收MapMessage

时间:2013-09-17 10:10:47

标签: java activemq

使用activeMq进行消息传输,我遇到了MapMessage,如下所述:

MapMessage Interface

它可以在地图结构中构建消息。

我的问题是如何从队列中接收MapMessage(而不是常规的TestMessage)?

在不同的教程(例如http://www.novell.com/documentation/extend52/Docs/help/MP/jms/tutorial/queueRequestor-1.htm)中描述了发送消息,但我没有遇到有关提取消息的示例。

2 个答案:

答案 0 :(得分:0)

QueueRequestor#request将返回消息,在您的情况下,消息将是MapMessage的类型。

这样做:

MapMessage result = (MapMessage)requestor.request(message);

答案 1 :(得分:0)

在更彻底地检查问题后,我认为这是我的误解。 即使使用常规的MessageConsumer,也可以接收MapMessage:

public MapMessage recieveMassage(){
    MapMessage m = null;
    try {
        Message message = consumer.receive();
        if (message instanceof MapMessage) {
            m = (MapMessage) message;
            logger.log(Level.FINEST, "message received:\n" + m.toString()+"\n");
        } else {
            System.out.println("Received: " + message);
            logger.log(Level.SEVERE, "Error message not of MapMessage type: "+ message);
        }
    } catch (Exception e) {
        logger.log(Level.SEVERE, "Error receiving a message: " + e.toString());
        e.printStackTrace();
    }
    return m;
}

问题是我使用activeMq控制台发送的消息本身。显然,只是将消息体写为地图(例如:{a1 = c1,a2 = c2 ...})是不够的,并且该类型作为常规TextMessage进行了互穿。