Ответ 1
Должен ли я написать одноразовую программу, которая читает сообщения из очереди недоставленных писем и позволяет мне указать целевую очередь для их отправки?
вообще говоря, да.
Вы можете настроить повторную попытку с задержкой, чтобы отправить сообщение обратно в исходную очередь, используя комбинацию плагина обмена сообщениями с задержкой.
но это только автоматизирует повторные попытки с интервалом, и вы, возможно, не устранили проблему до повторных попыток.
в некоторых случаях это нормально - например, когда ошибка вызвана тем, что внешний ресурс временно недоступен.
в вашем случае, однако, я считаю, что ваши мысли о создании приложения для обработки мертвых букв - это лучший путь по нескольким причинам:
- Вам нужно искать сообщения, что невозможно. RMQ
- это означает, что вам понадобится база данных для хранения сообщений из DLX/очереди
поскольку вы извлекаете сообщения из DLX/очереди, вам необходимо убедиться, что вы получаете всю информацию заголовка из сообщения, чтобы можно было повторно опубликовать в нужную очередь, когда придет время.
Я, конечно, не могу быть первым, кто столкнулся с этими проблемами, и мне интересно, если кто-то еще уже решил их.
а ты нет!
Есть много решений этой проблемы, все они сводятся к решению, которое вы предложили.
некоторые большие реализации "служебной шины" имеют встроенную функцию этого типа. я полагаю, что NServiceBus (или его SaaS-версия) встроен, например, - хотя в этом я не уверен на 100%.
если вы хотите разобраться в этом подробнее, поищите термин "ядовитое сообщение" - обычно это термин, используемый в данной ситуации. Я нашел несколько вещей в Google с помощью быстрого поиска, которые могут помочь вам в этом:
- http://lists.rabbitmq.com/pipermail/rabbitmq-discuss/2013-January/025019.html
- https://web.archive.org/web/20170809194056/http://tafakari.co.ke/2014/07/rabbitmq-poison-messages/
- https://web.archive.org/web/20170809170555/http://kjnilsson.github.io/blog/2014/01/30/spread-the-poison/
надеюсь, это поможет!