【问题标题】:Activemq RedeliveryDelay from redeliveryPolicy is ignored来自 redeliveryPolicy 的 Activemq RedeliveryDelay 被忽略
【发布时间】:2015-08-14 12:13:40
【问题描述】:

我在 OSGI 环境 (Karaf) 上遇到了一些关于 Camel 和 Activemq 的问题。 我希望队列中的消息在失败时会被重新传递! 但我想在重试之前延迟一下。

我找到了 org.apache.activemq.RedeliveryPolicy 类。我在我的蓝图 xml 中配置了一个具有不同属性的 bean,如下所示:

<bean id="redeliveryPolicy" class="org.apache.activemq.RedeliveryPolicy">
    <property name="initialRedeliveryDelay" value="2000" />
    <property name="redeliveryDelay" value="15000" />
    <property name="useExponentialBackOff" value="true" />
    <property name="backOffMultiplier" value="5" />
    <property name="maximumRedeliveryDelay" value="120000" />
    <property name="maximumRedeliveries" value="20" />
    <property name="queue" value="*" />
</bean>

当我测试此配置时,如果出现错误,队列会重试多次,它在“maximumRedeliveries”属性中配置。但是重新交付之间没有延迟。实际上 initialRedelivery 有效,但仅适用于第一次重试。我在不同的网站上搜索过,但我不是唯一遇到这些问题的人。

(Ps:我把 redeleveryPolicy Bean 放在了我的 org.apache.activemq.ActiveMQConnectionFactory 中)

感谢您的回答

(我为我的英语语法道歉)

【问题讨论】:

    标签: apache-camel activemq karaf blueprint-osgi


    【解决方案1】:

    如果端点关闭,Camel 和 ActiveMQ 只会尝试重新传递队列中的第一条消息。当达到 maximumRedeliveries 时,默认情况下,消息将被放置在死信队列 (DLQ) 中,Camel/ActiveMQ 将移动到队列中的下一条消息。一旦端点变得可用,队列中备份的所有消息都将以 Camel 和 ActiveMQ 的速度传递,并且不应用重新传递策略(因为队列中除了第一条消息之外的所有消息都是第一次传递,未重新交付)。

    【讨论】:

      【解决方案2】:

      redliveryDelay 值是一个状态跟踪值,不会导致您期望的行为。您应该配置初始延迟和最大延迟,并允许其他选项来控制重新传递回退的步长。

      【讨论】:

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