2016-10-28 28 views
1

我正在使用activemq編寫應用程序,我正在使用redelivery策略重新傳遞郵件。我正在使用ActiveMQ的ExponentialBackOff概念。ActiveMQ中的setBackOffMultiplier(double backOffMultiplier)如何工作

我的問題是這個ExponentialBackOff/setBackOffMultiplier是如何工作的。

例如在我的情況下,我想重新傳遞郵件直到郵件過期時間,即15分鐘。我想在15分鐘內嘗試重新傳遞10次。但ExponentialBackOff會使郵件重新傳遞超過15分鐘過期消息的時間即即使在15分鐘的到期時間之後,要重新傳送的消息仍然處於待定狀態。

這是爲什麼?我對這種行爲感到困惑。我正在使用的redelivery政策如下。

RedeliveryPolicy queuePolicy = new RedeliveryPolicy(); 
queuePolicy.setInitialRedeliveryDelay(0); 
queuePolicy.setBackOffMultiplier(3); 
queuePolicy.setUseExponentialBackOff(true); 
queuePolicy.setMaximumRedeliveries(10); 

回答

3

與此RedeliveryPolicy配置中,RedeliveryPolicy將使每次嘗試之後等待下文:

after 1s 
after 3s 
9s 
27s 
81s 
243s 
729s 
2187s 
6561s 
19683s 

當你看到這樣的嘗試小時後在此期間執行您看到消息的狀態是待定。 以防止這些長時間,也許你想設置maximumRedeliveryDelay=300000L(5分鐘)。 注意

一旦消息的重新交付嘗試超過配置的重新傳遞政策maximumRedeliveries,「毒ACK」送回給經紀人讓他知道該消息被認爲是毒丸。然後經紀人將信息發送給死信隊列,以便稍後進行分析。

您需要調整您的RedeliveryPolicy,因爲只要不超過maximumRedeliveries消息處於掛起狀態。

http://activemq.apache.org/message-redelivery-and-dlq-handling.html

相關問題