来自redeliveryPolicy的Activemq RedeliveryDelay将被忽略

时间:2015-08-14 12:13:40

标签: apache-camel activemq karaf blueprint-osgi

我在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中)

感谢您的回答

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

1 个答案:

答案 0 :(得分:1)

如果端点关闭,Camel和ActiveMQ只会尝试重新传输队列中的第一条消息。达到maximumRedeliveries时,默认情况下,消息将被置于死信队列(DLQ)中,Camel / ActiveMQ将移至队列中的下一条消息。一旦端点变得可用,队列中备份的所有消息将以Camel和ActiveMQ的速度传送,并且不应用重新传递策略(因为队列中的第一条消息首次被传送,没有重新传递)。