2016-10-28 12 views
1

Я пишу приложение, использующее activemq, где я использую политику переопределения, чтобы повторно отправлять сообщения. Я использую концепцию ExponentialBackOff от ActiveMQ.Как работает setBackOffMultiplier (double backOffMultiplier) в работе ActiveMQ

Мой вопрос в том, как этот экспоненциальныйBackOff/setBackOffMultiplier работать.

Например, в моем случае я хочу повторно отправить сообщение до истечения срока действия сообщения, что составляет 15 минут. Я хочу попытаться выполнить повторный набор 10 раз в течение 15 минут. Но ExponentialBackOff делает сообщение для повторного добавления до истечения 15 минут время сообщения, то есть сообщение, подлежащее повторной доставке, все еще находится в состоянии ожидания даже после истечения времени, равного 15 минутам.

Почему это? Я немного смущен этим поведением. Политика пересылки, которую я использую, приведена ниже.

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 минут). Обратите внимание, что

После попытки Redelivery сообщения системы превышает maximumRedeliveries настроенных для Redelivery политики, «отравленной извед» отправляются обратно брокер давая ему понять, что сообщение считается ядом таблеткой. Затем брокер берет сообщение и отправляет его в очередь с мертвыми буквами, чтобы впоследствии его можно было проанализировать.

Вам необходимо адаптировать RedeliveryPolicy, потому что сообщение находится в ожидании до тех пор, пока не будут превышены максимальные релейные выходы.

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