【问题标题】:MDB transaction retry intervalMDB 事务重试间隔
【发布时间】:2011-11-10 14:14:13
【问题描述】:

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

【问题讨论】:

    标签: jboss jms hornetq message-driven-bean


    【解决方案1】:

    维拉姆;

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

    • 重新投递延迟(您指出 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" 的消息头值,如果该数量等于最大重新传递次数,只需抑制任何异常并提交事务。

    【讨论】:

    • 感谢您重播 nicholas。我们将 jms 与 hornetq 一起使用。
    • 嗨,非常感谢您的回复。是否有任何 API 可以查看队列中的消息数。以便我们查看队列中的消息。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多