我在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中)
感谢您的回答
(我为我的英语语法道歉)
答案 0 :(得分:1)
如果端点关闭,Camel和ActiveMQ只会尝试重新传输队列中的第一条消息。达到maximumRedeliveries时,默认情况下,消息将被置于死信队列(DLQ)中,Camel / ActiveMQ将移至队列中的下一条消息。一旦端点变得可用,队列中备份的所有消息将以Camel和ActiveMQ的速度传送,并且不应用重新传递策略(因为队列中的第一条消息首次被传送,没有重新传递)。