2016-05-12 10 views
1

Ich bin neu bei IBM MQ und versuche, eine Anwendung zu schreiben, die Nachrichten aus einer allgemeinen Warteschlange verwendet, die ursprünglich an eine Alias ​​- Warteschlange oder ein Thema gesendet wurde, bevor sie an die gemeinsame Warteschlange. Nach dem Abrufen der Nachricht möchte ich basierend auf dem bestimmten Ziel der Nachricht eine bedingte Logik ausführen können.Abrufen der ursprünglichen Zielinformationen aus der IBM MQ - Nachricht

In RabbitMq haben wir die Möglichkeit, den ursprünglichen RoutingKey zu erhalten, um die Nachricht zu veröffentlichen. Dies erlaubt mir, mit einer Joker-Karte zu abonnieren, aber dann mache ich etwas besonderes für jede Nachricht basierend auf dem tatsächlichen RoutingKey.

Ich verwende derzeit eine einfache Installation von IBM MQ. Ist es möglich, das ursprüngliche Ziel (Alias-Warteschlange oder -Thema) der Nachricht zu ermitteln, bevor MQ es umgeleitet hat?

Kann MQ die Nachricht (Eigenschaft, MQMD-Feld, etc ...) während des Routings manipulieren, so dass ich den benutzerdefinierten Wert herausziehen konnte, sobald er abgerufen wird?

Wenn ich dies nicht mit der einfachen Version von MQ tun kann, gibt es ein zusätzliches Tool, das ich MQ hinzufügen kann, die diese Funktionalität unterbringen würde (Ich habe viele Beiträge über IBM Integration Bus, früher Message Broker gesehen, aber Ich kann immer noch nicht meinen Kopf um genau das, was es tut, oder wenn es meine Bedürfnisse erfüllen wird.)

Ich bin in .Net Programmierung und ich habe mit XMS und die einfachen .Net-Client-Tools über amqmdnet gespielt. dll

Antwort

5

Wenn die Nachrichten zu einem Thema veröffentlicht wurden und von dort auf der Grundlage einer Subskription in eine Warteschlange geroutet werden, enthalten die Nachrichten die MQTopicString-Nachrichteneigenschaft, die Ihnen die Themenzeichenfolge angibt, der sie veröffentlicht wurden.

Als Beispiel verwenden Sie das Suchmuster amqsbcg, um die Nachrichten in der Warteschlange mit dem dritten Argument '1' (amqsbcg 1) anzuzeigen. Wenn Sie Nachrichteneigenschaften in der Nachricht wird sie als ...

**** Nachrichteneigenschaften aufgeführt ****

MQTopicString: '/ A/B/C'

+0

Das brachte mich in die richtige Richtung! Ich fand, dass der Name der Eigenschaft "MQPS.Top" statt "MQTopicString" war, aber es enthielt die ursprüngliche Themenzeichenfolge, die zu dem Veröffentlichen der Nachricht verwandt wird. Ich habe auch überprüft, dass diese Eigenschaft festgelegt ist, wenn eine Alias-Warteschlange zum Weiterleiten an ein Thema verwendet wird. – bdway

0

Nein, der Objektname, der vom Hersteller verwendet wurde, ist verloren. Obwohl einige MQMD Header wie PutApplName, ReplyToQ oder ReplyToQMgr hilfreich sein können, um den Ursprung der Nachricht abzuleiten.

Es ist meiner Meinung nach, dass es für WMQ-Implementierungen eine schlechte Praxis ist, Endpoints mit vielen Eins zu Eins zu verwenden.

+0

Ich habe gedacht Wenn Sie diese Felder verwenden, kann die Liste der möglichen Werte jedoch ziemlich lang sein. Nur neugierig, warum viele zu eins schlechte Praxis wäre? Für mich scheint es, als ob jeder Publisher, der in seine eigene Warteschlange sendet und dann versucht, aus all diesen separaten Warteschlangen zu lesen, ein Management-Albtraum ist. Jedes Mal, wenn ich einen anderen Publisher hinzufüge, muss ich einen zusätzlichen Prozess hinzufügen, um diese Warteschlange zu nutzen. – bdway

+0

Das ist alles in Ordnung, bis Sie versuchen herauszufinden, wer was gesendet hat. Wenn es einen narrensicheren Weg gäbe, um das zu erreichen, was Sie fragen, hätte ich kein Problem damit, mehrere Endpunkte zu produzieren. – Stavr00

1

MQ ist Middleware, die von vielen Anwendungen verwendet wird, wenn sie begann, Unterstützung für jede Anwendungslogik zu integrieren, würde es wirklich chaotisch werden, deshalb verwaltet MQ nur so viele Informationen, die benötigt werden, um die Nachrichten vom Sender zum Empfänger zu bekommen. Im Allgemeinen ist es nicht empfehlenswert, die Mechanismen der Transportschicht zur Unterstützung der Anwendungslogik zu verwenden. Dadurch führen Sie zu tiefe Abhängigkeiten von Ihrer Transportlösung ein.

Alle Informationen, die von den kommunizierenden Anwendungen zur Bereitstellung ihrer Dienste verwendet werden, sollten von den Absender- und Empfängeranwendungen in die Nachricht aufgenommen werden. MQ bietet die Möglichkeit, Informationen zu übertragen, nicht um sie zu erstellen oder zu verwalten.

Zum Beispiel könnten Sie Ihre Absenderanwendung so schreiben, dass sie die ID der Absenderanwendung in den Nachrichteneigenschaften enthält. MQ überträgt diese Eigenschaften und bietet Möglichkeiten zum Abrufen von Nachrichten über diese Eigenschaften.

Zu Ihren weiteren Fragen kann MQ standardmäßig die übertragenen Nachrichten nicht manipulieren (abgesehen von der Umwandlung der Codepage), dafür ist Message Broker (IIB) zuständig. Message Broker integriert sich jedoch nicht in MQ, sondern verwendet nur MQ als Transportmechanismus. Daher ist es nicht hilfreich, den Absender von Nachrichten zu ermitteln, wenn die Nachrichten vollständig von MQ weitergeleitet werden. Wenn die Nachrichten vom Nachrichtenbroker weitergeleitet werden, können sie alle Informationen in den gesendeten Nachrichten enthalten.

Verwandte Themen