“通常不鼓励使用ObjectMessage”,而是使用什么?

时间:2016-06-20 21:21:38

标签: jms activemq

ActiveMQ文档state

  

虽然通常不鼓励使用ObjectMessage,因为它   介绍了生产者和消费者之间的类路径的耦合,   ActiveMQ支持它们作为JMS规范的一部分

由于没有太多的消息总线经验,我一直在接近它们,在概念上类似于SOAP Web服务,在那里您为消费者指定服务接口契约,然后构建等效的代理。

我想要实现的目标是:

  1. 发布商以某种方式指示消息的架构
  2. 订阅者以某种方式了解消息的架构
  3. ObjectMessage解决了这个问题,虽然没有给出所提到的类路径耦合的最好方法。据我所知,其他消息类型为消费者提供了关于预期消息格式的最小指导(例如,消费者必须假设MapMessage包含具有某些值类型的某些键)。

    有没有其他合理的方法来实现这一点,或者这甚至不是我应该追求的东西?

1 个答案:

答案 0 :(得分:0)

因为出版商/订阅者的想法是了解架构。第一步是使用JSON / protobuf确保有效载荷的结构。 (个人不是XML的忠实粉丝)。然后我们将数据作为TextMessage / BytesMessage传递。

虽然想法是让发布者/订阅者传达模式。有几种方法可以实现这一目标:

  1. 订阅者通过publishér的javadoc或示例调用了解架构。 (对于简单的用例来说听起来不错)
  2. 拥有一个集中配置,可以发布发布者和订阅者。此配置可能位于提供配置的数据库/应用程序中。如果有修改,有效的实施将确保发布者/订阅者都不会中断。
  3. 这种方法优于Object消息方法的优点:

    1. 没有有效负载的紧密耦合(即jar升级/属性更改等)
    2. 显着的性能提升 - 这是一个example,其中带有string和int的Java类比直接存储int和字符串的字节数多3.7倍。