активная политика доставки Mq - PullRequest
0 голосов
/ 17 ноября 2011

Можете ли вы сказать мне значение этой функции, что они делают?Я пытался найти его в Google, но не могу понять.

Я устанавливаю политику возврата.

policy.setBackOffMultiplier(2);
    policy.setUseExponentialBackOff(true);
    policy.setMaximumRedeliveries(2);
    policy.setRedeliveryDelay(5000)

Ответы [ 2 ]

3 голосов
/ 18 ноября 2011

Сообщения доставляются клиенту, когда происходит любое из следующих событий:

  • Используется транзакционный сеанс и вызывается откат ().
  • Транзакционный сеанс закрывается до принятия
  • Сеанс использует CLIENT_ACKNOWLEDGE и вызывается Session.recover ().

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

Подробнее об обработке доставки сообщений в Active MQ можно прочитать здесь:

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

Свойства политики возврата, на которые вы ссылаетесь:

  • MaximumRedeliveries: задает максимальное количество раз, когда сообщение будет доставлено до того, как оно будет считаться отравленной таблеткой и возвращено посреднику, чтобы оно могло перейти в очередь недоставленных сообщений (используйте значение -1, чтобы определить бесконечное количество повторных доставок)
  • maximumRedeliveryDelay: задает максимальную задержку доставки, которая будет применяться, если установлена ​​опция useExponentialBackOff.(используйте значение -1, чтобы определить, что максимум не применяется) (v5.5)
  • useExponentialBackOff: следует ли использовать экспоненциальный откат (т.е. экспоненциально увеличить время ожидания)
  • backOffMultiplier:множитель возврата

Все свойства для политики повторной доставки описаны здесь:

http://activemq.apache.org/redelivery-policy.html

0 голосов
/ 11 мая 2014

Несколько точек для добавления к упомянутым выше

  1. Если вы используете CLIENT_ACK в качестве режима подтверждения и закрываете сеанс без подтверждения последнего сообщения, все ожидающие сообщения будут доставлены.
  2. Если вы используете асинхронную передачу сообщений и RuntimeException добавляется в метод onMessage(), соответствующее сообщение будет доставлено повторно.

Все вышеперечисленное подвергается максимальным попыткам повторной доставки.После максимальной попытки повторной доставки сообщение перейдет в очередь недействительных сообщений (если вы настроили) или будет просто отброшено.

То, что вы запросили, представляет собой тип политики повторной доставки.Таким образом, в случае, если сообщение должно быть повторно доставлено, насколько большое значение (задержка) должно быть уделено его повторной доставке.Если setUseExponentialBackOff установлен для каждой повторной доставки, одна и та же задержка доставки сообщения будет экспоненциально увеличиваться.

Все свойства, доступные для политики повторной доставки,

enter image description here

Для получения полной информации смотрите здесь .

...