RabbitMQ Neuordnungsnachrichten

8

RabbitMQ erfüllt alle Voraussetzungen für das von mir geplante Projekt und speichert eins. Ich würde verschiedene Arbeiter hören in einer Warteschlange und es ist wichtig, dass sie die neuesten Nachrichten (d. H. Die letzte Sequenznummer) zuerst (LIFO) verarbeiten.

Meine Anwendung ist so, dass neuere Nachrichten ältere Nachrichten ziemlich veralten. Wenn Sie über Arbeitskräfte verfügen, können Sie die älteren Nachrichten weiterhin verarbeiten, aber es ist wichtig, dass die neueren zuerst ausgeführt werden.

Nach dem Durchsuchen der verschiedenen Foren und so kann ich nur eine Lösung sehen und das ist für einen Client, um eine Nachricht zu verarbeiten, sollte es zuerst:

  • konsumiere alle Nachrichten
  • ordnen Sie sie entsprechend der Sequenznummer
  • neu an
  • erneut an die Warteschlange
  • senden
  • konsumiere die erste Nachricht

Hässlich und problematisch, wenn der Kunde halbwegs stirbt. Aber vielleicht hat jemand hier eine bessere Lösung.

Meine Forschung basiert (teilweise) auf:

Hinweis: Der erwartete Nachrichtenverkehr wird für einige Warteschlangen ungefähr im Bereich von 1 msg / Stunde und für andere Warteschlangen bei 100 / Minute liegen. Also nichts Besonderes.

    
dgorissen 11.02.2011, 16:22
quelle

2 Antworten

3

Da es keine Antwort gibt, schätze ich, dass ich meine Hausaufgaben ziemlich gut gemacht habe;)

Wie auch immer, nachdem ich die Anforderungen mit den anderen Interessengruppen besprochen hatte, wurde entschieden, dass ich die LIFO-Anforderung für jetzt fallen lassen kann. Darüber können wir uns Sorgen machen.

Eine Lösung, die wir wahrscheinlich einführen werden, besteht darin, dass der Mitarbeiter eine zweite Warteschlange öffnet, die der Master verwenden kann, um dem Mitarbeiter mitzuteilen, welche Jobs ignoriert werden sollen und zusätzliche Kontroll- / Überwachungsinformationen bereitzustellen sowieso).

Das RabbitMQ, das die AMQP 1.0-Spezifikation implementiert, kann hier ebenfalls hilfreich sein.

Also werde ich diese Frage als für jetzt beantwortet markieren. Jemand anderen ist noch frei, hinzuzufügen oder zu verbessern.

    
dgorissen 16.02.2011, 08:32
quelle
1

Eine Möglichkeit könnte sein, basic.get in einer Schleife zu verwenden und darauf zu warten, dass die Antwort basic-ok.message-count zu Null wird (alle anderen Nachrichten werden weggeworfen):

%Vor%

Natürlich müssten Sie die Nachrichtenroutingmuster auf dem Broker so einrichten, dass ein Kunde, der Nachrichten verwirft, sich nicht mit einem anderen verwirft. Versuchen Sie, Nachrichten nicht zu speichern, da sie an der obersten Stelle des Stapels verbleiben und so aussehen wie die neuesten.

    
Robin 20.02.2011 01:38
quelle