使用HornetQ强制传递消息顺序

时间:2010-11-03 08:35:47

标签: java jms hornetq

我已经使用HornetQ设置了jms服务器作为JMS提供程序(队列)。

我有一个应用程序充当生产者,另一个(不同的计算机)充当消费者。

我知道JMS规范不保证交付顺序,但我正在寻找一种方法:按照发送顺序接收完全的消息,即使它是提供者特定的。

有什么想法吗?

2 个答案:

答案 0 :(得分:2)

显然,这可以通过禁用消费者缓存来实现。这是通过更改hornetq-jms.xml

来完成的
   <connection-factory name="ConnectionFactory">
      <connectors>
         <connector-ref connector-name="netty-connector"/>
      </connectors>
      <entries>
         <entry name="ConnectionFactory"/>
      </entries>

      <consumer-window-size>0</consumer-window-size> <!-- add this line -->
   </connection-factory>

答案 1 :(得分:1)

实际上,JMS规范的第4.4.10.2节(消息发送顺序)对于排序非常清楚。

如果您有一个生产者,并且单个消费者参与队列或主题订阅,即使存在重新发送,也始终保证消息排序。

如果您有多个使用者,则可能会在回滚或关闭您的使用者时重新传递客户端缓冲,并且客户端缓冲区可能会在订购时交付。

在HornetQ上,您还拥有消息组,该消息组对生成的消息赋予额外的排序约束。