【问题标题】:Can't change ActiveMQ redeliveryPolicy无法更改 ActiveMQ redeliveryPolicy
【发布时间】:2021-08-09 02:14:10
【问题描述】:

我们使用由Java Windows service wrapper 触发的 ActiveMQ 5.14.2.1,使用 JMS 和 Spring 框架 JMS (v4.3.28) 从 Tomcat webapp 访问。

我正在尝试配置重新传递策略,以便当我们使用 session.rollback() 将消息返回到队列时,它会遵循该策略。为此,我在activemq.xml 文件中设置了redeliveryPlugin,如下所示:

<amq:redeliveryPlugin fallbackToDeadLetter="true" sendToDlqIfMaxRetriesExceeded="true">
    <amq:redeliveryPolicyMap>
        <amq:redeliveryPolicyMap>
            <amq:defaultEntry>
                <amq:redeliveryPolicy maximumRedeliveries="20" useExponentialBackOff="true" 
initialRedeliveryDelay="1000" redeliveryDelay="2000" maximumRedeliveryDelay="600000"/>
            </amq:defaultEntry>
        </amq:redeliveryPolicyMap>
    </amq:redeliveryPolicyMap>
</amq:redeliveryPlugin>

我还更新了 broker 元素以打开 schedulerSupport:

<amq:broker brokerName="MyBroker" dataDirectory="${activemq.data}" 
            useJmx="false" schedulerSupport="true">

我已经尝试了基于各种documentation pagesseveral SO results 的一些排列,但没有成功。无论我尝试什么,它都使用默认的重新传递行为(1 秒之间,没有指数退避,最多 6 次重试)。我知道它正在读取这个 activemq.xml 文件,因为当我放入与 XSD 不匹配的内容时,它会出错。

我必须做些什么来改变 ActiveMQ 的重新投递政策?

【问题讨论】:

  • @JustinBertram 是的。会更新。

标签: activemq spring-jms


【解决方案1】:

在使用调试器在 ActiveMQ 中进行大量调查和探索之后,我弄清楚了发生了什么。事实证明,上面的配置基本上是正确的。我稍微修改了一下:

<amq:redeliveryPolicy maximumRedeliveries="20" useExponentialBackOff="true" 
     initialRedeliveryDelay="5000" backOffMultiplier="2" maximumRedeliveryDelay="600000"/>

令人困惑的是客户端和服务器都在尝试重试,但似乎它们使用不同的算法:

  • 客户端最初会进行 6 次重新尝试,间隔 1 秒。
  • 如果这些都失败了,它会将消息发送回 ActiveMQ
  • ActiveMQ 执行重新传递行为,这意味着使用初始重新传递延迟(5 秒)
  • 如果消息仍然失败,客户端会以 1 秒的间隔再次重试,但这次它只进行 5 次尝试。
  • ActiveMQ 再次执行重新传递行为,将延迟加倍至 10 秒
  • 重新发送后,客户端再次重试,但这次只重试 4 次,然后将消息发送回 ActiveMQ。

这个循环一直在进行,客户端每次将本地重试次数减少 1,而 ActiveMQ 使用指数退避增加重试时间。最后,ActiveMQ 以 10 分钟间隔(最大延迟)发送消息,客户端在失败时进行 0 次本地重试。我猜客户端的想法是尝试让代码在本地解决问题几次,但随着时间的推移,这种可能性会越来越小。

【讨论】:

    猜你喜欢
    • 2018-03-17
    • 2017-09-23
    • 2019-03-27
    • 1970-01-01
    • 1970-01-01
    • 2018-01-04
    • 1970-01-01
    • 1970-01-01
    • 2015-02-11
    相关资源
    最近更新 更多