【问题标题】:Receiving Java Objects over JMS通过 JMS 接收 Java 对象
【发布时间】:2012-05-21 16:59:32
【问题描述】:
这真的是使用 JMS 接收 POJO 的方式吗?
public void onMessage(Message msg) {
ObjectMessage objMsg = (ObjectMessage) msg;
if(objMsg.getObject() instanceof <<sometype>>) {
//do something
}
}
我是否必须强制转换为 ObjectMessage。实际上,我必须检查 msg 是否也可以转换为 ObjectMessage。
还是我错过了什么?
谢谢
【问题讨论】:
标签:
java
object
jms
message
pojo
【解决方案1】:
AFAIK,就是这样。但是,在单个目的地(队列或主题)中混合不同的消息类型和消息内的不同对象类型是非常罕见的。因此,如果您知道只需要包含 SomeType 对象的 ObjectMessage,则可以跳过 instanceof 检查。
【解决方案2】:
引用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");
}
}
}