【问题标题】:JMS queue redelivery order in jbossjboss中的JMS队列重新传递顺序
【发布时间】:2012-10-13 04:49:15
【问题描述】:

我将一个 java 对象从一个线程发送到一个队列。使用队列中的消息调用相关 MDB 的 onMessage。 onMessage,我将消息中存在的键与缓存中的键匹配,如果键不存在,我会抛出自定义运行时异常,只是为了使容器重新传递此消息。 (我有另一个自治系统,它从外部系统响应中将密钥添加到缓存中,它可能会慢 3-5 秒) 在这种情况下,这个容器是把这个未处理的消息添加到队列的末尾,还是立即重新传递?有没有办法延迟重新交货时间?假设队列总是每秒充满约 550 条消息。

问候

【问题讨论】:

    标签: jms hornetq


    【解决方案1】:

    HornetQ 目前有一个重新发送延迟功能,但所有后续消息都可以正常发送。

    如果发生重新交付但尚未实施,则有一个功能请求可以将队列保留一段时间。

    但是,如果队列中有多个消费者,则无论如何订单都会分配给您的消费者。如果deliveryCount > 1,您可以使用消息分组并在您的onMessage 上添加睡眠。消息分组是为了保证没有其他消费者(或另一个MDB 实例)将接收到无序的消息。

    根据您的应用程序是如何完成的,并且根据您的要求,您可能希望只允许您的 MDB 的单个实例。

    另外:查看consumer-window-size,您可以在其中选择不缓冲客户端,当您有多个消费者或多个mdb实例时,这具有更好的行为。

    【讨论】:

      猜你喜欢
      • 2014-12-09
      • 2014-06-27
      • 1970-01-01
      • 2010-12-26
      • 2018-07-16
      • 1970-01-01
      • 1970-01-01
      • 2011-01-29
      • 2011-06-14
      相关资源
      最近更新 更多