我已经使用HornetQ设置了jms服务器作为JMS提供程序(队列)。
我有一个应用程序充当生产者,另一个(不同的计算机)充当消费者。
我知道JMS规范不保证交付顺序,但我正在寻找一种方法:按照发送顺序接收完全的消息,即使它是提供者特定的。
有什么想法吗?
答案 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上,您还拥有消息组,该消息组对生成的消息赋予额外的排序约束。