2016-09-22 8 views
0

Wenn ich eine Nachricht an eine Exchange veröffentlichen und ein Verbraucher der Nachricht nicht verarbeitet, kann ich die Nachricht in einem festgelegten Intervall wiederholen. Das Problem besteht darin, dass die Nachricht an alle Verbraucher gesendet wird und nicht nur an den Verbraucher, der versagt hat.RabbitMQ erneut senden Nachricht an fehlgeschlagenen Verbraucher nur

Wie senden Sie nur die Nachricht an den Verbraucher, der fehlgeschlagen ist?

+0

Wenn Sie sagen, eine Nachricht an Exchange gesendet, welche Art von Austausch ist es? Und haben Sie eine Warteschlange pro Verbraucher und die Nachricht wird für alle veröffentlicht? Kannst du ein bisschen im Detail fragen? –

+0

Der Austausch ist ein Themenaustausch. Jeder Verbraucher hat seine eigene Warteschlange. – ibanore

Antwort

0

Wenn der Benutzer ausfällt, bleibt die Nachricht in der Warteschlange und Sie müssen sie nicht erneut senden. Wenn der Benutzer aktiv ist, erhalten Sie die letzte Nachricht, die nicht verarbeitet werden konnte. Auf diese Weise lösen wir das Problem, die Nachricht immer wieder zu senden. Und Sie müssen keine Nack senden einfach nicht die Nachricht und die Nachricht wird in der Warteschlange sein, wenn der Verbraucher ausfällt. Sie können dies versuchen, indem Sie die Nachricht erhalten und den Kunden stoppen, bevor Sie tun. Sie können die Nachricht in der Warteschlange wieder sehen.

0

nehme an, Sie haben und den Austausch zu mehreren Warteschlangen

exchange ---> queue1 ---> consumer 1 
     |---> queue2 ---> consumer 2 
     |---> queue3 ---> consumer 3 

wenn ein Verbraucher nicht gebunden ist, brauchen Sie nicht die Nachricht erneut zu senden, wird die Nachricht an die Warteschlange gespeichert. Das ist der Bereich, in dem Warteschlangen vorhanden sein müssen

+0

Wenn Benutzer 2 fehlschlägt, möchte ich die Nachricht nur an Verbraucher 2 in 5 Minuten erneut senden. Wie würdest du das machen? – ibanore

+0

Ich glaube, Sie müssen die Nachricht nicht erneut senden, wenn der Verbraucher ausfällt, nicht die Nachricht bestätigen. Nachdem der Konsument vollständig mit der Verarbeitung fertig ist, kann nur die Nachricht bestätigt werden, so dass sie gelöscht wird. Mit Rabbitmq können Sie dies auf der Verbraucherseite und nicht auf der Publisher-Seite handhaben. Wenn der Verbraucher die Nachricht nicht verarbeiten kann, bleibt sie in der Warteschlange und der Verbraucher erhält die Nachricht erneut, wenn sie sich in der Warteschlange befindet. –

+0

@tibanez Sie müssen die Nachricht nicht erneut senden. wie Mitra Ghorpade sagt, es ist genug, manuelle Bestätigung zu verwenden. Wenn der Verbraucher versagt, sendet nicht die Bestätigung. Ich möchte hinzufügen, dass Sie immer an einer Börse veröffentlichen und Sie immer zu einer oder mehreren Warteschlangen konsumieren. – Gabriele

Verwandte Themen