繁体   English   中英

通过JMS接收Java对象

[英]Receiving Java Objects over JMS

这真的是通过JMS接收POJO的方式吗?

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

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

还是我想念一些东西?

谢谢

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");
        }
    }
}

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

是的,您可能想查看一些例外情况。 然而,对于spring(以及诸如apache camel之类的Frameworks),您可以轻松地连接一个简单处理某些类对象的bean。 这可能是也可能不值得开销,并增加了配置的复杂性以简化代码。

查看本文的几页以获取描述: http//www.wmrichards.com/mdp.pdf

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM