Есть ли способ заставить RabbitMQ отбросить сообщение, если его обработка занимает слишком много времени?
Например, если у меня есть очередь электронной почты, а сценарий потребителя занимает слишком много времени для отправки электронной почты, сделайте так, чтобы он отбрасывал сообщение (помещал его в обмен недоставленных писем) и выбирал следующий элемент в очереди.
Я в курсе x-message-ttl
но это здесь не применимо, потому что оно игнорируется, когда сообщение начинает обрабатываться.
Я не думаю, что есть способ делать то, что вы хотите на брокере. Для того, чтобы сообщение было перенесено на обмен мертвых писем, вам необходимо отправить reject
или же nack
ответы на сообщение, которое не представляется возможным в вашей ситуации.
Например, у вас есть EmailSender
обслуживание и EmailGenerator
оказание услуг.
Вы можете организовать это так:
EmailGenerator
отправляет сообщение с электронной почтой.
EmailSender
получает это.
Когда закончена обработка, EmailSender
посылает sent confirmation
сообщение для EmailGenerator
,
EmailGenerator
отслеживает состояние того, что было успешно отправлено до сих пор.
Если EmailGenerator
не получил sent confirmation
сообщение для определенного электронного письма в течение X секунд, оно отправляет соответствующее сообщение электронной почты.
Других решений пока нет …