Ich arbeite gerade an einem Projekt, bei dem ich mit einem IBM System kommunizieren muss, das über WebSphere MQ mit der Außenwelt kommuniziert. Ich muss das System in einer "Anfrage-Antwort" -Methode mit Warteschlangen abfragen, und ich werde dies über einen Warteschlangenmanager tun.WebSphere MQ Request/Reply-Szenario
Allerdings kann ich nicht ganz verstehen, wie das in der Praxis funktioniert.
Angenommen, ich habe mehrere Instanzen der gleichen Anwendung, die eine Nachricht in eine Anforderungswarteschlange legt. Die Nachricht erhält nach dem Verlassen der Anwendung eine CorrelationId
und und ReplyToQueue
-Eigenschaft wird für jede Nachricht festgelegt, um sicherzustellen, dass der Warteschlangenmanager weiß, auf welche Warteschlange die Antwort zu legen.
Wie funktioniert der Warteschlangenmanager jedoch mit der Antwortwarteschlange? Es gibt keine Garantie hinsichtlich des Zeitpunkts der Antworten, also wie kommt es, dass die richtige Antwort an die Anwendungsinstanz zurückkehrt, die die entsprechende Anfrage ausgegeben hat?
Ich denke an Nachrichtenwarteschlangen als eine FIFO-Warteschlange, in denen Nachrichten nacheinander ausgewählt werden müssen. Dies würde jedoch bedeuten, dass Instanz A eine Antwort auswählen könnte, die für Beispiel B gedacht ist. Offensichtlich kann dies nicht so sein, wie es funktioniert.
Dann, als ich an der API aussehen (com.ibm.mq.MQQueue
) Ich sehe, dass eine Nachricht, die ich die Chance haben, wählen Sie die CorrelationId
und MessageId
der Anforderungsnachricht zu liefern. Bedeutet dies, dass der Warteschlangenmanager, wenn ich den Warteschlangenmanager nach einer Nachricht (mit diesen IDs) abfrage, die Nachrichten in der Warteschlange durchläuft und die entsprechende Nachricht zurückgibt? Dies würde andererseits bedeuten, dass wir nicht über eine FIFO-Warteschlange sprechen?
Um zu den anderen Antworten hinzuzufügen, behält WMQ einen Index der 'MsgID'- und' CorrelID'-Felder bei, so dass jedes 'GET' auf diesen Feldern nicht alle Nachrichten durchlaufen muss, um den richtigen zu finden. Weitere Informationen zur Entwicklung von Warteschlangen-Apps finden Sie im WMQ-Infocenter unter [* Entwerfen von WebSphere MQ-Anwendungen *] (http://iopt.us/1pT4PdO). –