我正在使用activemq编写应用程序,我正在使用重新传递策略来重新传递消息 . 我正在使用ActiveMQ的ExponentialBackOff概念 .
我的问题是这个ExponentialBackOff / setBackOffMultiplier是如何工作的 .
例如,在我的情况下,我想重新发送消息,直到消息到期时间为15分钟 . 我想尝试在15分钟内重新发送10次 . 但ExponentialBackOff使消息重新发送到消息的15分钟到期时间之后即,即使在15分钟的到期时间之后,要重新传送的消息仍处于挂起状态 .
为什么是这样?我对这种行为感到困惑 . 我使用的重新发送政策如下 .
RedeliveryPolicy queuePolicy = new RedeliveryPolicy();
queuePolicy.setInitialRedeliveryDelay(0);
queuePolicy.setBackOffMultiplier(3);
queuePolicy.setUseExponentialBackOff(true);
queuePolicy.setMaximumRedeliveries(10);
1 回答
使用此
RedeliveryPolicy
配置,RedeliveryPolicy将在每次等待以下后进行尝试:如您所见,此尝试在数小时后执行,同时您会看到消息状态正在等待处理 . 为了防止这些长时间,你可能想要设置
maximumRedeliveryDelay=300000L
(5 minutes) . 注意您需要调整RedeliveryPolicy,因为只要未超过maximumRedeliveries,邮件就会处于暂挂状态 .
http://activemq.apache.org/message-redelivery-and-dlq-handling.html