2017-11-21 3 views
0

Wenn ich die gleiche Nachricht zweimal mit der Methode Delivery.Ack bestätige, schließt sich mein Verbraucherkanal von selbst.RabbitMQ mehrere Bestätigungen derselben Nachricht schließt den Consumer

Ist das erwartete Verhalten? Hat jemand das erlebt?

Der Grund, dass ich dieselbe Nachricht zweimal bestätige, ist ein Sonderfall, bei dem ich die ursprüngliche Nachricht in Kopien zerlegen und auf dem Verbraucher verarbeiten muss. Sobald der Kunde alles verarbeitet, wird alles wiederholt und abgebrochen. Da es Kopien des Unternehmens sind, ACKS es die gleiche Nachricht zweimal und meine Consumer-Kanal schaltet sich ab

+0

Es scheint mir, dass es ein erwartetes Verhalten ist, aber ich kann keinen Beweis finden :-). – RidgeA

+0

Ja. Ich habe versucht, nach Beweisen zu suchen, konnte aber keine finden. – Crusaderpyro

Antwort

1

Nach dem AMQP reference eine Kanal Ausnahme ausgelöst wird, wenn eine Nachricht zum zweiten Mal bestätigt wird:

Eine Nachricht darf nicht mehr als einmal bestätigt werden. Der empfangende Peer MUSS validieren, dass ein Nicht-Null-Liefertag sich auf eine ausgelieferte Nachricht bezieht, und eine Kanalausnahme auslösen, wenn dies nicht der Fall ist.

Zweiter Aufruf zu Ack(...) für die gleiche Nachricht wird einen Fehler nicht zurück, aber der Kanal aufgrund dieser Ausnahme vom Server empfangen wird geschlossen:

Exception (406) Reason: "PRECONDITION_FAILED - unknown delivery tag ?" 

einen Zuhörer über Channel.NotifyClose zu Es ist möglich, registrieren beobachte diese Ausnahme.

Verwandte Themen