4

这真的是使用 JMS 接收 POJO 的方式吗?

public void onMessage(Message msg) {
     ObjectMessage objMsg = (ObjectMessage) msg;
     if(objMsg.getObject() instanceof <<sometype>>) {
        //do something 
     }
 }

我是否必须强制转换为 ObjectMessage。实际上,我必须检查 msg 是否也可以转换为 ObjectMessage。

还是我错过了什么?

谢谢

4

3 回答 3

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");
        }
    }
}
于 2012-05-21T17:33:32.610 回答
1

AFAIK,就是这样。但是,在单个目标(队列或主题)中混合不同的消息类型和消息内的不同对象类型是非常罕见的。因此,如果您知道只需要包含 SomeType 对象的 ObjectMessages,则可以跳过 instanceof 检查。

于 2012-05-21T17:35:02.987 回答
1

是的,您可能想检查一些例外情况。但是,使用 spring(以及 apache camel 等框架),您可以很容易地连接一个简单地处理某个类的对象的 bean。这可能值得也可能不值得开销和增加配置的复杂性以简化代码。

查看这篇文章的几页以获得描述:http ://www.wmrichards.com/mdp.pdf

于 2012-05-21T17:43:38.720 回答