RabbitMQ: Может ли сообщение с мертвыми буквами умереть снова?

Мы реализовали отложенную обработку сообщений с 2 ​​очередями и x-dead-letter-exchange / x-message-ttl, где после тайм-аута сообщения в queue1 оно перейдет в queue2.

Теперь можно настроить RabbitMQ так, чтобы, если во время обработки сообщений из queue2 мы отклоняли его как «мертвую букву», он автоматически переходил в queue3? Меня беспокоит то, что сообщения в queue2 уже помечены как «мертвые», есть ли способ отличить те, которые мертвые, потому что они были отклонены, и автоматически помещать только те в queue3?


person Artem    schedule 13.11.2014    source источник


Ответы (1)


Да, возможно, что сообщение прописано несколько раз.

Чтобы узнать причину (ы), почему сообщение было пропущено без букв, просмотрите заголовок x-death, который представляет собой массив, отсортированный самым последним-первым, поэтому последняя причина, по которой сообщение было помечено мертвыми буквами, является первой.

Дополнительные сведения см. В разделе недоставленных букв в руководстве по обмену недоставленными буквами.

UPD:

Обсуждается в официальной группе пользователей RabbitMQ о Можно ли перемещать мертвых- буквенное сообщение, только если оно было отклонено?:

...

Меня беспокоит следующее: поскольку сообщения уже имеют мертвые буквы по TTL, есть ли способ переместить их из Queue2 в Queue3 , только если они отклонены?

Чтобы строго ответить на ваш вопрос, нет: вы не можете выбрать, о каких событиях писать мертвую букву.

Однако я думаю, что вы действительно спрашиваете: «Не все ли сообщения из очереди queue2 сразу переадресовываются в очередь 3, поскольку они уже один раз уже прописаны мертвыми буквами?» И ответ на это нет; после того, как сообщение было помещено в очередь с мертвыми буквами, оно становится свободным агентом и будет снова пропущено мертвыми буквами только в том случае, если оно снова сделает что-то мертвое.

person pinepain    schedule 13.11.2014
comment
Да, но если у меня 3 очереди, могу ли я настроить правило, согласно которому недоставленное сообщение перемещается из очереди 2 в очередь 3, только если оно было отклонено? - person Artem; 13.11.2014
comment
DLX работает, если сообщение было отклонено или достигнут предел TTL или длины. Так что, если вы не используете TTL и не настроили длину очереди, то да, вы получите то, что хотите. - person pinepain; 13.11.2014
comment
Если сообщения уже перемещены из очереди 1 в очередь 2 с недействительной буквой по TTL, означает ли это, что нет возможности переместить ТОЛЬКО те, которые были прочитаны и отклонены, среди тех, которые были перемещены в очередь 3? - person Artem; 13.11.2014
comment
Я бы сказал нет. Без использования сообщений это выглядит невозможным. Но есть обмен для обмена привязками, так что, возможно, они смогут вам в этом помочь. Хотя я не уверен насчет них, попробуйте поиграть с обменом заголовками и привязками e2e. Или лучше задать этот вопрос в официальной группе пользователей RabbitMQ. В любом случае, было бы неплохо получить обратную связь с выбранным вами решением. - person pinepain; 13.11.2014
comment
Я получил ответ на свое сообщение от группы пользователей RabbitMQ: groups.google .com / forum / #! topic / rabbitmq-users / gR-PlZWyYMk, поэтому они подтвердили, что сообщение не будет автоматически перемещаться из очереди 2 в очередь 3 до тех пор, пока снова не будет заключена сделка. Не могли бы вы обновить свой ответ, чтобы я мог его принять? - person Artem; 16.11.2014
comment
Спасибо, что оставались на связи! Я добавил ссылку на обсуждение и добавил цитату из ответа Саймона. - person pinepain; 17.11.2014