You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ActiveMQ Artemis 2.26.0:如何配置72小时渐进退避重试后转DLQ

解决方案

问题出在你未配置max-delivery-attempts参数,它的默认值为10,导致消息仅重试10次就被转入死信队列,和你设置的渐进退避延迟参数无关。要实现“消息以渐进退避方式最多重试72小时后转入DLQ”的需求,需按以下方式调整配置:

1. 确定合适的max-delivery-attempts值

结合你设置的退避参数:

  • 初始重试延迟:30秒(30000ms)
  • 延迟乘数:2.5
  • 最大重试延迟:72小时(259200000ms)

计算每次重试的延迟时间及总时长:

  • 第1次重试延迟:30000ms
  • 第2次:75000ms
  • 第3次:187500ms
  • 第4次:468750ms
  • 第5次:1171875ms
  • 第6次:2929687.5ms
  • 第7次:7324218.75ms
  • 第8次:18310546.875ms
  • 第9次:45776367.1875ms
  • 第10次:114440917.96875ms
  • 第11次及之后:259200000ms(达到最大延迟上限)

前10次重试的总延迟约53小时,第11次重试延迟为72小时。若希望总重试时长不超过72小时,可将max-delivery-attempts设为10;若允许最后一次重试延迟满72小时后再转入DLQ,可设为11。

2. 修改broker.xml配置

在exampleQueue的地址设置中添加max-delivery-attempts参数,保留原有退避配置:

<address-settings>
   <!--override the redelivery-delay  for the example queue-->
   <address-setting match="exampleQueue">
      <redelivery-delay>30000</redelivery-delay>
      <redelivery-delay-multiplier>2.5</redelivery-delay-multiplier>
      <dead-letter-address>deadLetterQueue</dead-letter-address>
      <max-redelivery-delay>259200000</max-redelivery-delay>
      <!-- 设置足够大的重试次数,确保总重试时长覆盖72小时 -->
      <max-delivery-attempts>11</max-delivery-attempts>
   </address-setting>
</address-settings>

<addresses>
   <address name="deadLetterQueue">
      <anycast>
         <queue name="deadLetterQueue"/>
      </anycast>
   </address>
   <address name="exampleQueue">
      <anycast>
         <queue name="exampleQueue"/>
      </anycast>
   </address>
</addresses>

3. 补充说明

若希望消息在72小时后无论重试次数多少都进入DLQ,可结合expiry-delay参数(设为259200000ms),并将过期消息指向死信队列:

<address-setting match="exampleQueue">
   <!-- 其他配置不变 -->
   <expiry-delay>259200000</expiry-delay>
   <expiry-address>deadLetterQueue</expiry-address>
</address-setting>

内容的提问来源于stack exchange,提问作者Themikebe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 08:25:57