Как отклонить сообщения после перелопатывания из одной очереди в другую? - PullRequest
0 голосов
/ 30 апреля 2018

В Spring и RabbitMQ я настроил два обмена темами x и dlx и две очереди q и dlq. q привязан к x и dlq к dlx. dlx настроен как обмен сообщениями для q.

Когда сообщение в q отклонено (без очереди), оно успешно отправляется на dlx, а затем на dlq.

Теперь я использую плагин shovel-plugin для перемещения букв с ошибками в dlq обратно в q. Это работает успешно, пока сообщения успешно обрабатываются в этот раз (ack).

Но если одно из этих сованных сообщений в q снова отклоняется, оно молча отбрасывается. Я ожидаю, что его снова отправят на DLX dlx. Я что-то неправильно настроил или неправильно понял концепцию DLX или лопаты?

1 Ответ

0 голосов
/ 30 апреля 2018

Я подозреваю, что вы чувствуете вкус этого ...

Можно сформировать цикл сообщений о недоставке. Например, это может произойти, когда очередь сообщений с ошибками отправляется на обмен по умолчанию без указания ключа маршрутизации недоставленных сообщений. Сообщения в таких циклах (то есть сообщения, которые попадают в одну и ту же очередь дважды) будут отбрасываться, если в течение всего цикла не было отклонений.

... потому что ты копаешься. См. Обмен мертвыми буквами .

Вместо этого настройте DLQ с TTL и конфигурацией недоставленных букв, которая заставляет сообщения с истекшим сроком действия направляться обратно в исходную очередь. Таким образом, заголовок x-death получает две записи - 1 для отклонений из исходной очереди и 1 для истечения срока из DLQ.

Я предполагаю, что с помощью лопат брокер думает, что есть цикл.

...