Вот что мы имеем здесь:Dead-буквенное мертвых литерных сообщений в RabbitMQ
- Тема Обмен
DLE
, который предназначен, чтобы быть буквальные Обмен - Тема Обмен
E
, который является «основным «Обмен - Несколько очередей (
EQ1
, ...,EQn
) связаны сE
(и инициализированыx-dead-letter-exchange = DLE
), каждый с собственным ключом маршрутизации. Эти очереди из них потребляются. - Для каждого
EQn
, естьDLEQn
(инициализируетсяx-dead-letter-exchange = E
иx-message-ttl = 5000
), связанный сDLE
с тем же ключом маршрутизации какEQn
. Эти очереди не потребляется от
То, что я хочу, это следующее: если потребитель не может обработать сообщение от EQn
, это NACKS сообщение с requeue: false
и он попадает в DLEQn
- то есть к соответствующей очереди на бирке мертвых букв. Теперь я хочу, чтобы это сообщение некоторое время сидело на DLEQn
, а затем перенаправлялось обратно в исходную очередь EQn
для обработки.
Попытайтесь, как я мог, я не смог получить «возврат к исходной очереди». Я вижу, что сообщения сидят в DLEQn
со всеми правильными заголовками и ключом маршрутизации неповрежденными, но после истечения TTL они просто исчезают в воздухе.
Что я здесь делаю неправильно?
Как он возникает в исходной очереди?Является ли RabbitMQ выполнением повторной отправки или есть отдельный потребитель в очереди повторных попыток? –
Отдельный потребитель берет сообщение из очереди повторной перенаправления и просматривает заголовки кролика. Заголовком, представляющим интерес, является «x-death», внутри которого он имеет обмен и очередь, из которой пришло сообщение. Мы используем это для отправки сообщений во многие разные очереди, поэтому нам нужна только одна «очередь повторного перенаправления». Имеют смысл? – jhilden
Работает как очарование! Большое спасибо. –