Странное поведение RabbitMQ в очереди недоставленных сообщений для сообщений от бирж - PullRequest
1 голос
/ 25 апреля 2019

Я использую библиотеку amqp для php в качестве клиента rabbitmq, и мы хотим отклонить сообщение из очереди с именем «test»

Чтобы не потерять это сообщение, мы определили очередь deadletter под названием «test.deadletter»".

Если мы напрямую добавим сообщение в очередь" test "(через веб-интерфейс) и отклоним его с помощью метода basic.reject из клиента amqplib, сообщение будет правильно перемещено в очередь deadletter.

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

Сообщения одинаковы, и два необходимых параметра для метода basic.reject были в обеих попытках одинаковыми.Нет никакой разницы, только тот факт, что сообщение пришло один раз от обмена, а другое от какой-то прямой вставки.

Является ли это ошибкой или ожидаемым поведением?Чего мне не хватает?

С наилучшими пожеланиями

1 Ответ

1 голос
/ 25 апреля 2019

Обмен мертвыми буквами (DLX) - это нормальные обмены .Если ваше сообщение невозможно выполнить (например, из-за ключа маршрутизации) или если нет никаких очередей, связанных с обменом мертвыми буквами, RabbitMQ отбросит сообщение.

Я подозреваю, что test.deadletter не привязан кобмен мертвыми буквами с использованием того же ключа маршрутизации, что и для публикации сообщения.


ПРИМЕЧАНИЕ: команда RabbitMQ контролирует rabbitmq-users список рассылки и только иногда отвечает на вопросы по StackOverflow.

...