我使用 Mule 作为 ESB 解决方案。我有一个队列,我从那里获取消息并尝试向始终失败的服务发出 http 请求。
我在 ActiveMQ 上配置了 RedeliveryPolicy,如下所示:
<spring:bean id="retryRedeliveryPolicy" class="org.apache.activemq.RedeliveryPolicy"
name="retryRedeliveryPolicy">
<spring:property name="maximumRedeliveries" value="76" />
<spring:property name="initialRedeliveryDelay" value="300000" />
<spring:property name="maximumRedeliveryDelay" value="3600000" />
<spring:property name="useExponentialBackOff" value="true" />
<spring:property name="backOffMultiplier" value="2" />
<spring:property name="queue" value="*" />
</spring:bean>
5 分钟后重试。然后10分钟、20、40、60、60、60...大约~3天
问题是,重试逻辑是非持久性的。
假设消息已重试 2 天。而且我已经部署了新版本的 mule 应用程序,或者重新启动了服务器...在这种情况下,重试逻辑将从 5 分钟、10 分钟开始重新开始...因为重试状态由客户端保存在 RAM 内存中。
热衷于使 RedeliveryPolicy 持久化? 2天后重新启动服务器后,它必须再重试1天。
我认为一个解决方案可能是将消息的 timeToLive 设置为 72 小时。但即使如此,重新启动服务器后。它不会从开始时每小时重试。将从5分钟开始...
最佳答案
您可以使用 JMS 消息的 JMSXDeliveryCount 属性来检查已重试的次数。重试时间间隔逻辑应依赖于 JMSXDeliveryCount 变量。
message.getIntProperty("JMSXDeliveryCount ")
关于java - Mule 持久 ActiveMQ 重新交付策略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43626793/