java - Mule 持久 ActiveMQ 重新交付策略

标签 java mule activemq retry-logic

我使用 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 ")

http://activemq.apache.org/activemq-message-properties.html

关于java - Mule 持久 ActiveMQ 重新交付策略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43626793/

相关文章:

esb - 将Mule ESB服务的请求传递给条件路由器

ssl - 什么是 NIO 协议(protocol)?

java - 当生产者的连接断开时如何收到通知?

java - 如何计算快速排序中的比较和交换?

java - 使用 pow(x,y) 比较大数时, "<"小于运算符和 "<="运算符之间的差异

java - Log4j2 覆盖过去一天的日志文件

mule - 我如何在骡子中强制异常

java - 增强lucene中的一些单词

mysql - 读取 .csv 文件并将值插入到 mulesoft 中的 MySQL 数据库中

Spring,JMS - 无法为 XML 架构命名空间找到 Spring NamespaceHandler