我使用 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分钟开始...