RabbitMQ — отменить сообщение, если обработка занимает слишком много времени

Есть ли способ заставить RabbitMQ отбросить сообщение, если его обработка занимает слишком много времени?

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

введите описание изображения здесь

Я в курсе x-message-ttl но это здесь не применимо, потому что оно игнорируется, когда сообщение начинает обрабатываться.

2

Решение

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

Например, у вас есть EmailSender обслуживание и EmailGenerator оказание услуг.
Вы можете организовать это так:

EmailGenerator отправляет сообщение с электронной почтой.

EmailSender получает это.

Когда закончена обработка, EmailSender посылает sent confirmation сообщение для EmailGenerator,

EmailGenerator отслеживает состояние того, что было успешно отправлено до сих пор.
Если EmailGenerator не получил sent confirmation сообщение для определенного электронного письма в течение X секунд, оно отправляет соответствующее сообщение электронной почты.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]