【问题标题】:force order of messages with HornetQ使用 HornetQ 强制消息的顺序
【发布时间】:2011-06-06 09:18:39
【问题描述】:

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

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

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

有什么想法吗?

【问题讨论】:

    标签: java jms hornetq


    【解决方案1】:

    显然,这可以通过禁用消费者缓存来实现。这是通过更改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>
    

    【讨论】:

    • 但是通过将窗口大小设置为 0,您实际上已经杀死了一个缓存层,它已经并将影响性能。
    • 就我而言,消息的顺序远比一些潜在的性能损失重要。但是,如果您有更好的主意,我真的很想听听。谢谢。
    • 设置此选项对我不起作用,使用 HornetQ 2.2.5 在本地进行了测试。一个客户端产生消息,一个消费,顺序不连续。
    【解决方案2】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-12-12
      • 2013-03-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-12
      • 1970-01-01
      • 2015-08-21
      相关资源
      最近更新 更多