Hi,
mein Java Client lauscht per JMS auf einer Queue (IBM Websphere MQ) und implementiere dazu das Interface MessageListener.
Auf der Queue lauschen insgesamt ca. 150 Clients, die jedoch nur die Nachrichten „zugestellt“ bekommen sollen (Aufruf von onMessage()
, bei denen die MessageID gleich der ClientID ist.
Wie kann ich da am besten filtern, ohne dass im schlechtesten Fall erst 149 Clients die Nachricht bekommen und den Erhalt aufgrund der falschen messageID nicht commit’ten ?
Einen riesigen Dank schonmal im Voraus
Lars
Hallo Lars,
Nun die Möglichkeit besteht immer, dass alle 150 Clients die Message bekommen. Sie müssen sie ja lesen, sonst können sie nicht filtern…
D.h. der Listener kann erst aktiv werden, wenn die onMessage Methode durch das eintreffen einer Message aufgerufen wird.
Informationen zum filtern findest Du in der API Dok bei der Klasse Message.
Gruss, Simon
Hallo Simon,
vielen Dank. Dort ist ganz anschaulich erklärt, wie ich einen MessageSelector benutze.
Wenn wir gerade dabei sind
…
Wie schaffe ich es, mit JMS eine Nachricht zu verschicken, bei der ich die MessageID selbst generiert und gesetzt habe. Wenn ich bei meiner erzeugten Nachricht die ID mit setJMSMessageID("…") setze, dann wird diese ID beim Absenden überschrieben, wie ich später beim Empfangen merke
.
Hast Du da noch eine Idee ?
Danke
Lars
MessageSelektor
Hi Lars -
setJMSMessageID("…") setze, dann wird diese ID beim
Absenden überschrieben, wie ich später beim Empfangen merke
Der MessageSelektor ist eine SQL-Ähnliche Sprache, mit der du praktisch jede Property der JMS-Message überprüfen kannst.
Wenn du zB. die property ‚type‘ setzt, kannst du zB. mit
type=‚spezielleNachrichtFürDich‘
filtern.
Dh. Setz dir eine eigene Variable und filtere dann entsprechend mit einem Message Selektor. Den Rest sollte der Container bzw. der JMS-Server erledigen und deine Beans bzw. Empfänger bekommen nur das, was du als für sie interessant definiert hast.
mfG,
J.P.Jarolim