使用 activeMq 进行消息传输,我遇到了 MapMessage,如下所述:
它支持在映射结构中构建消息。
我的问题是-如何从队列中接收 MapMessage(而不是常规的 TestMessage)?
在不同的教程(例如http://www.novell.com/documentation/extend52/Docs/help/MP/jms/tutorial/queueRequestor-1.htm)中描述了发送消息,但我没有遇到关于消息的提取。
使用 activeMq 进行消息传输,我遇到了 MapMessage,如下所述:
它支持在映射结构中构建消息。
我的问题是-如何从队列中接收 MapMessage(而不是常规的 TestMessage)?
在不同的教程(例如http://www.novell.com/documentation/extend52/Docs/help/MP/jms/tutorial/queueRequestor-1.htm)中描述了发送消息,但我没有遇到关于消息的提取。
在更彻底地检查了这个问题后,我认为这是我的误解。即使使用常规 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 相互渗透。
QueueRequestor#request将返回您的消息,在您的情况下将是 MapMessage 类型。
只需这样做:
MapMessage result = (MapMessage)requestor.request(message);