JMS - Wie funktionieren Nachrichtenselektoren mit mehreren Warteschlangen- und Themenkonsumenten?

8

Angenommen, Sie haben eine JMS-Warteschlange und mehrere Benutzer überwachen die Warteschlange auf Nachrichten. Sie möchten, dass einer der Verbraucher eine bestimmte Art von Nachricht erhält, also entscheiden Sie sich für Nachrichtenselektoren.

Sie definieren beispielsweise eine Eigenschaft, die in Ihrer JMS-Nachrichtenkopfzeile mit dem Namen targetConsumer enthalten sein soll. Ihr Nachrichtenselektor, den Sie auf den Verbraucher mit dem Namen A anwenden, ist etwas wie WHERE targetConsumer = 'CONSUMER_A' .

Es ist klar, dass Consumer A jetzt nur Nachrichten mit der Eigenschaft aufnehmen wird, die in dem Beispiel wie im Fall ist. Werden die anderen Verbraucher das wissen? IOW, wird ein anderer Konsument, der nicht durch einen Nachrichtenselektor eingeschränkt ist, die Nachrichten CONSUMER_A abrufen, wenn er in der Warteschlange vor Consumer A ? Muss ich Nachrichtenselektoren wie WHERE targetConsumer <> 'CONSUMER_A' auf die anderen anwenden?

Ich bin RTFMing und sammle jetzt empirische Daten, aber ich hatte gehofft, dass jemand von der Spitze weiß.

    
Stephen Harmon 13.05.2010, 16:51
quelle

3 Antworten

7

Wenn mehrere Benutzer dieselbe Warteschlange verwenden, müssen die Nachrichtenselektoren für diese Konsumenten korrekt konfiguriert sein, damit bei der Bestimmung des gewünschten Verbrauchers kein Konflikt entsteht.

Im Falle von Message-Driven-Beans (ein Konsument von JMS-Nachrichten) kann der Selektor in der Datei ejb-jar.xml angegeben werden, wodurch die Konfiguration zum Zeitpunkt der Bereitstellung (anstelle der gegenüberliegenden Ansicht) erfolgen kann des Spezifizierens der Nachrichtenauswahl während der Entwicklung).

Bearbeiten : Im echten Leben wäre dies sinnvoll, wenn verschiedene Konsumenten für die Verarbeitung von Nachrichten verantwortlich sind, die dieselben Header (oft vom selben Produzenten erzeugt) enthalten, die in derselben Warteschlange geschrieben sind. Zum Beispiel könnten Nachrichtenselektoren in einer Handelsanwendung verwendet werden, um zwischen Kauf- und Verkaufsaufträgen zu unterscheiden, wenn der Hersteller nicht in der Lage ist, die JMS-Nachrichten in zwei separate Kauf- und Verkaufsschlangen zu schreiben.

    
Vineet Reynolds 13.05.2010, 17:15
quelle
0

Ja, ein anderer Verbraucher, der keinen Nachrichtenselektor verwendet, erhält eine Nachricht, die für den Verbraucher A bestimmt ist (oder für irgendeine Nachricht oberhalb der Warteschlange). Daher müssen Consumer-Anwendungen beim Teilen einer Warteschlange diszipliniert werden und nur die für sie bestimmten Nachrichten auswählen.

    
Shashi 13.06.2017 00:03
quelle
0

Der 'erste' JMS-Nachrichtenkonsument aus einer Warteschlange nimmt die Nachricht auf, wenn der Selektor übereinstimmt. Was "zuerst" bedeutet, ist ein Implementierungsdetail (könnte Round-Robin sein, basierend auf Priorität oder Netzwerknähe). Wenn Selektoren in Warteschlangen verwendet werden, müssen Sie sicherstellen, dass diese Selektoren nicht überlappend sind.

Formal: Es muss keine Nachricht vorhanden sein, die zwei Selektoren in derselben Warteschlange entspricht

Dies ist ein weiterer Nachteil von Warteschlangen im Vergleich zu Themen - in der Praxis sollten Sie immer überlegen, zuerst Themen zu verwenden. Bei einem Thema erhält jeder passende Verbraucher die Nachricht.

    
Axel Podehl 13.06.2017 07:56
quelle

Tags und Links