Schlösser und batch-Holen von Nachrichten mit RabbitMq

Ich versuche, RabbitMq in einer eher unkonventionellen Weg (obwohl an dieser Stelle kann ich wählen Sie eine andere message-queue-Implementierung, wenn nötig). Anstatt Kaninchen push-Nachrichten an meine Verbraucher, der Verbraucher eine Verbindung zu einem queue und holt einen Stapel von N Nachrichten (bei denen es belegt und mögliche lehnt einige), danach springt es zu einer anderen Warteschlange und so weiter. Dies geschieht für die Redundanz. Wenn einige Verbraucher crash-alle Nachrichten werden garantiert, um konsumiert werden, von einigen anderen Verbraucher.

Das problem ist, dass ich mehrere Verbraucher und ich will nicht, dass Sie konkurrieren über die gleiche Warteschlange. Gibt es eine Möglichkeit zu garantieren, eine Sperre, die in einer Warteschlange? Wenn nicht, kann ich zumindest sicherstellen, dass, wenn 2 Verbraucher angeschlossen werden, um die gleiche Warteschlange Sie nicht, Lesen Sie die gleiche Botschaft? Transaktionen könnte mir helfen, zu einem gewissen Grad, aber ich habe gehört die Rede, dass Sie bekommen entfernt von RabbitMQ.

Andere architektonische Vorschläge sind zu begrüßen.

Dank!

EDIT:
Wie schon in dem Kommentar es ist ein-eine Besonderheit in der, wie ich brauche zum verarbeiten der Nachrichten. Sie machen nur Sinn genommen, in Gruppen und es gibt eine hohe Wahrscheinlichkeit, dass die zugehörigen Nachrichten sind verklumpten in einer Warteschlange. Wenn zum Beispiel ziehe ich einen Stapel von 100 Nachrichten, es gibt eine hohe Wahrscheinlichkeit, dass ich in der Lage sein, etwas zu tun, mit Nachrichten 1-3, 4-5,6-10, usw. Wenn es mir nicht gelingt eine Gruppe zu finden für einige Meldungen, ich werde diese erneut an die Warteschlange. WorkQueue würde nicht funktionieren, denn es würde die Verbreitung von Nachrichten aus der gleichen Gruppe mehrere Mitarbeiter, die nicht wissen, was mit Ihnen zu tun.

  • Offensichtlich werden die Verbraucher können synchronisieren sich untereinander mit so etwas wie Gossip in Fall ist dies nicht möglich, aber ich war neugierig...
Schreibe einen Kommentar