2017-04-06 1 views
1

Ich möchte mit erfolglosen Nachrichten umgehen, die der Verbraucher aus der Warteschlange erhält und sie erneut in die Warteschlange stellt.Nack and Reject on RabbitMQ

Stellen Ich habe eine Situation wie folgt aus:

P => | foo | bar | baz | => C 

Wo foo, bar und baz Meldungen sind.

Wenn Verbraucher liest baz aber etwas schief geht, ich entweder die basic.reject verwenden können oder die basic.nack (https://www.rabbitmq.com/nack.html). Mit einem dieser beiden Befehle übergebe ich das Argument, um die Nachricht zurückzusetzen.

Das Problem ist, dass die Nachricht in der gleichen Position wie zuvor wiederholt wird, sodass die nächste Nachricht wieder baz lautet.

ich möchte es requeue aber es zurück an den Anfang der Warteschlange senden:

P => | baz | foo | bar | => C 

ich mit ein paar Zeilen Code auf meine Anwendung gelöst, aber ich frage mich, ob eine bessere Lösung vorhanden ist, vielleicht mit einige Funktionen von RabbitMQ direkt.

Antwort

1

Sie einen Blick auf die Dead Letter Queue (DLQ) annehmen kann: https://www.rabbitmq.com/dlx.html

+0

Ja, ich habe die ganze Dokumentation gestern gelesen. Dies ist nicht das, was ich gesucht habe, aber anscheinend, was ich suchte, existiert nicht und die Warteschlange der toten Buchstaben kann eine gute Abhilfe sein. – xyzale

+0

Hier verhält sich die Warteschlange (FIFO) genau wie erwartet, da Sie den manuellen Bestätigungsmodus verwenden, wird der Thread warten, bis er eine Bestätigung erhält, da er nicht verarbeitet werden kann. Auf der anderen Seite macht die Verarbeitung einer schlechten Nachricht immer wieder keinen Sinn. Wiederholen Sie es für 2-3 mal (spring-amqp hat direkten Support), wenn immer noch scheitert dann Deadletter es, so dass Sie später analysieren das Muster der schlechten Nachricht und direkt erreichen Client-Team. – lambodar

+0

kann sein, dass Sie TTL zu Ihren fehlgeschlagenen Nachrichten hinzufügen und DLX hinzufügen können. Sobald es abgelaufen ist, wird es automatisch in die Hauptwarteschlange verschoben. – lambodar

Verwandte Themen