2017-04-30 3 views
2

Gibt es eine Möglichkeit, RabbitMQ dazu zu bringen, die Nachricht zu verwerfen, wenn die Verarbeitung zu lange dauert?RabbitMQ - Nachricht verwerfen, wenn die Verarbeitung zu lange dauert

Zum Beispiel, wenn ich eine E-Mail-Warteschlange habe und das Consumer-Skript zu lange dauert, um die E-Mail zu senden, verwerfe die Nachricht (lege sie in den Dead Letter-Austausch) und wähle das nächste Element in der Warteschlange.

enter image description here

Ich bin mir bewusst, x-message-ttl aber das gilt hier nicht, weil es ignoriert wird, sobald die Nachricht verarbeitet beginnt zu werden.

Antwort

0

Ich glaube nicht, dass es eine Möglichkeit gibt, auf dem Broker zu tun, was Sie wollen. Damit die Nachricht in einen Dead Letter-Austausch verschoben wird, müssen Sie reject oder nack Antworten auf die Nachricht senden, die in Ihrer Situation nicht möglich scheint.

Zum Beispiel haben Sie EmailSender Service und EmailGenerator Service. Sie können es auf diese Weise organisieren:

EmailGenerator sendet Nachricht mit E-Mail.

EmailSender empfängt es.

Wenn die Verarbeitung abgeschlossen ist, sendet EmailSendersent confirmation Nachricht an EmailGenerator.

EmailGenerator verfolgt den Status von dem, was bisher erfolgreich gesendet wurde. Wenn EmailGenerator innerhalb von X Sekunden keine sent confirmation Nachricht für eine bestimmte E-Mail erhalten hat, wird die entsprechende E-Mail erneut gesendet.