In einem FIFO-Qeueing-System ist es am besten, Priority Messaging zu implementieren

8

Für Message-orientierte Middleware, die Prioritätsnachrichten (wie AMQP) nicht konsistent unterstützt, was ist der beste Weg, Prioritätsverbrauch zu implementieren, wenn Warteschlangen nur FIFO-Semantik haben? Der allgemeine Anwendungsfall wäre ein System, in dem Verbraucher Nachrichten mit einer höheren Priorität vor Nachrichten mit einer niedrigeren Priorität empfangen, wenn in der / den Warteschlange (n) ein großer Nachrichtenrückstand existiert.

    
quaternion 16.07.2009, 17:48
quelle

1 Antwort

10

Wenn Sie nur eine FIFO-Unterstützung für eine bestimmte einzelne Warteschlange haben, müssen Sie entweder mehrere Warteschlangen, einen Vermittler oder einen komplexeren Verbraucher einrichten.

Mehrere Warteschlangen können auf verschiedene Arten behandelt werden. Der Produzent und der Konsument könnten vereinbaren, zwei Warteschlangen zwischen sich zu haben, eine für hohe Priorität und eine für Hintergrundaufgaben.

Wenn Ihr Producer auf eine einzelne Warteschlange beschränkt ist, Sie aber die Kontrolle über den Consumer haben, sollten Sie einen Fan-Out-Router in den Pfad einbeziehen. So Producer- & gt; Router ist eine einzige Warteschlange, und der Router hat dann zwei Warteschlangen an den Verbraucher.

Ein anderer Weg, um dieses Problem zu lösen, ist wahrscheinlich, dass es nicht ideal ist, wenn Ihr Kunde einen Thread vor die Warteschlange stellt und die Arbeit dann intern versendet. So etwas wie die Router-Version oben, aber in einer einzigen App. Dies hat den Nachteil, dass mehrere Nachrichten in Ihrer App im Flug sind, was die Wiederherstellung im Falle eines Fehlers erschweren kann.

Vergessen Sie nicht, das Verhindern der effektiv niedrig priorisierten Ereignisse, was auch immer sie sind, in Betracht zu ziehen, wenn einige von ihnen verarbeitet werden sollten, selbst wenn Ereignisse mit höherer Priorität immer noch herumhängen.

    
sdg 24.12.2009, 02:13
quelle