【问题标题】: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");
              }
          }
      }
      

      【讨论】:

        【解决方案3】:

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

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

        【讨论】:

          猜你喜欢
          • 2015-10-09
          • 2013-07-13
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-12-17
          相关资源
          最近更新 更多