这真的是通过JMS接收POJO的方式吗?
public void onMessage(Message msg) {
ObjectMessage objMsg = (ObjectMessage) msg;
if(objMsg.getObject() instanceof <<sometype>>) {
//do something
}
}
我是否必须转发给ObjectMessage。实际上我必须检查msg是否也可以转换为ObjectMessage。
还是我错过了什么?
THX
答案 0 :(得分:1)
从JMS Spring Doc引用示例,正如您在示例中所看到的,我们需要检查消息是否为TextMessage类型,因此在您的情况下我们必须检查转换或检查您的对象是否是消息类型的实例,所以你有两种方法,希望这可以澄清你的问题。
示例强>
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageListener;
import javax.jms.TextMessage;
public class ExampleListener implements MessageListener {
public void onMessage(Message message) {
if (message instanceof TextMessage) {
try {
System.out.println(((TextMessage) message).getText());
}
catch (JMSException ex) {
throw new RuntimeException(ex);
}
}
else {
throw new IllegalArgumentException("Message must be of type TextMessage");
}
}
}
答案 1 :(得分:1)
AFAIK,就是这样。但是,在单个目标(队列或主题)中混合不同的消息类型和消息内的不同对象类型是非常罕见的。因此,如果您知道只需要包含SomeType对象的ObjectMessages,则可以跳过检查实例。
答案 2 :(得分:1)
是的,您可能想查看一些例外情况。然而,对于spring(以及诸如apache camel之类的Frameworks),您可以轻松地连接一个简单处理某些类对象的bean。这可能是也可能不值得开销,并增加了配置的复杂性以简化代码。
在本文中查看几页以获取说明:http://www.wmrichards.com/mdp.pdf