MassTransit с RabbitMQ: когда сообщение перемещено в очередь ошибок

Я использую RabbitMQ версии 3.0.2, и я вижу около 1000 сообщений в очереди ошибок. Я хочу знать

  • В какой момент сообщения перемещаются в очереди ошибок?
  • Есть ли способ узнать, почему какое-то сообщение перемещается в очередь ошибок?
  • Есть ли способ переместить сообщение из очереди ошибок в обычную очередь?

Спасибо

Ответ 1

  • a) они не могут десериализоваться или b) потребитель обрабатывает обработку исключений пять раз
  • Не совсем... Если вы заглянете в сообщение в очереди, заголовки полезной нагрузки могут содержать заметку, но я не думаю, что мы это сделали. Если вы включите регистрацию (NLog, log4net и т.д.), Вы сможете увидеть исключения в своем журнале. Вам нужно будет сопоставить идентификаторы сообщений в этот момент, чтобы выяснить, почему именно.
  • С помощью MassTransit встроено не встроено. В основном потому, что, как представляется, нет большого, общего способа справиться с этим. Каждый хочет вокруг этого процесса. Dru действительно создал приложение BusDriver (в main MT rep repo), которое можно использовать для перемещения сообщений обратно на соответствующий обмен. Это поведение по умолчанию существует, поэтому вы, по крайней мере, знаете, что что-то не удается, если вы не используете инфраструктуру для ее обработки.

Ответ 2

Чтобы добавить ответ Трэвиса, во время моего развития я нашел несколько других причин для сообщений, идущих в очередь ошибок:

  • В опубликованном типе сообщения нет потребителя
  • SAGA и потребитель ожидают того же конкретного типа сообщения. Даже если вы попытаетесь дифференцировать использование "Accepts" и ".Selected", как SAGA, так и Consumer не должны быть запрограммированы на получение одного и того же типа сообщений.