Как работает redeliver AMQ?Полностью ли он удерживает потребителя в процессе повторной доставки? - PullRequest
4 голосов
/ 01 апреля 2012

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

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

Кажется, что нормальное сообщение будет заблокировано, если оно будет доставлено позже доставленного. Оно не будет использовано до тех пор, пока доставленное сообщение не будет многократно пытаться достичь максимального времени повторной доставки. Это может привести к ситуации, когда простое в использовании сообщение должно долго ждать, пока оно не будет использовано.

Мне интересно, как работает AMQ redeliver Когда сообщение доставляется потребителю, другое сообщение может быть отправлено этому потребителю до тех пор, пока текущее сообщение не будет использовано или не истечет время ожидания (до DLQ).

Может кто-нибудь помочь? Спасибо,

Ответы [ 2 ]

8 голосов
/ 01 апреля 2012

Основной задачей ActiveMQ при пересылке сообщений является соблюдение порядка сообщений в очереди.

Учитывая два сообщения A и B, которые отправляются в очередь с определенной политикой повторной доставки, как вы описываете: если клиент не сможет обработать A, это сообщение будет помещено обратно в очередь, и никакие другие сообщения не будут использованы до тех пор, пока A успешно потребляется.

Дополнительные сведения см. В разделе Восстановление сообщений ActiveMQ и обработка DLQ .


Пожалуйста, не забудьте проголосовать за этот ответ, если он отвечает на ваш вопрос.

3 голосов
/ 27 сентября 2015

Для этого случая можно установить ActiveConnectionFactory в onBlockingRedelivery. Подробности в документации по ActiveMq Api :

...