8

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

我有一个作为生产者的应用程序和另一个(不同的计算机)作为消费者的应用程序。

我知道 JMS 规范不能保证传递的顺序,但我正在寻找一种方法来做到这一点:完全按照它们发送的顺序接收消息,即使它是特定于提供者的。

有任何想法吗?

4

2 回答 2

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>
于 2010-11-03T09:17:01.083 回答
1

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

如果您有一个生产者和一个消费者订阅队列或主题,则即使存在重新传递,也始终保证消息排序。

如果您有多个消费者,则可能会在回滚或关闭消费者的情况下重新交付客户端缓冲,并且可能会无序交付客户端缓冲区。

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

于 2011-06-06T01:18:39.033 回答