我已经设置了一个JMS服务器作为JMS提供者(队列)的HornetQ。强制HornetQ消息的顺序
我有一个应用程序作为生产者和另一个(不同的计算机)作为消费者。
我知道JMS规范并不保证交货顺序,但我正在寻找一种方法来做到这一点:按照发货的顺序收到消息,确切地说是,即使它是提供商具体。
任何想法?
我已经设置了一个JMS服务器作为JMS提供者(队列)的HornetQ。强制HornetQ消息的顺序
我有一个应用程序作为生产者和另一个(不同的计算机)作为消费者。
我知道JMS规范并不保证交货顺序,但我正在寻找一种方法来做到这一点:按照发货的顺序收到消息,确切地说是,即使它是提供商具体。
任何想法?
显然这可以通过禁用消费者缓存来实现。这是通过改变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>
其实JMS规范的第4.4.10.2(消息的顺序发送)约为排序很清楚。
如果您拥有单个生产者,并且单个消费者拥有队列或主题订阅,那么即使存在重新传送,也会始终保证消息排序。
如果您有多个使用者,则在回滚或关闭您的使用者时可能会重新传递客户端缓冲,并且客户端缓冲区可能不按顺序传递。
在HornetQ上,你也有消息组,它赋予生成的消息额外的排序约束。
但是,通过将窗口大小设置为0,您已经有效地杀死了一层会影响性能的缓存。 – 2011-01-03 00:35:37
在我看来,消息的顺序比一些潜在的性能损失重要得多。但是,如果你有更好的想法,我真的很想听到它。谢谢。 – Bogdan 2011-01-03 06:33:19
设置这个选项并不适合我,在HornetQ 2.2.5本地测试。一个客户端产生消息,一个消费,顺序不连续。 – Dag 2012-10-08 14:11:04