3

我们可以控制 MDB 中的事务重试间隔吗?如果是这样,请提供示例或将我引导至文档。我们希望为 MDB 事务设置 3 分钟的时间间隔。希望是,如果查询第一次失败,那么它会在 3 分钟后重试。

4

1 回答 1

3

维拉姆;

查看 Hornet Documentation for Message Redelivery。您需要考虑的问题是:

  • 重新交付延迟(您指出 3 分钟)。
  • 应重新传递消息的次数。
  • 如果您选择无限期地重新交付,则在最后一次重新交付尝试失败时发生的最终操作可能是:
    • 放下消息。
    • 将消息排入指定的DLQ。
    • 将消息排入其他队列。

设置重新发送延迟

延迟重新发送在地址设置配置中定义。

例子:

 <!-- delay redelivery of messages for 3m -->
 <address-setting match="jms.queue.exampleQueue">
    <redelivery-delay>300000</redelivery-delay>
 </address-setting>

设置最大重投次数和DLQ配置

这可以通过在地址设置配置中指定 DLQ 配置来以声明方式定义:

例子:

 <!-- undelivered messages in exampleQueue will be sent to the dead letter address 
    deadLetterQueue after 3 unsuccessful delivery attempts
  -->
 <address-setting match="jms.queue.exampleQueue">
    <dead-letter-address>jms.queue.deadLetterQueue</dead-letter-address>
    <max-delivery-attempts>3</max-delivery-attempts>
 </address-setting>

如果要在指定的重新传递失败次数后删除消息,请检查“JMSXDeliveryCount”的消息头值,如果该数字等于最大重新传递次数,只需抑制任何异常并提交事务。

于 2011-09-10T17:58:57.210 回答