MQAbrufknoten in einem Anforderung-Antwort-Nachrichtenfluss verwenden

Details zur Verarbeitung, die im MQAbrufknoten abläuft, um das oben beschriebene Ergebnis zu erreichen, finden Sie unter Nachrichtenverarbeitung im MQAbrufknoten. Details zur Konstruktion dieses Nachrichtenflusstyps finden Sie im Beispiel Beispielprogramm 'Coordinated Request Reply'.

Einführung

Diese Seite gibt eine Einführung in die Verwendung eines MQAbrufknotens in einem Anforderung-Antwort-Nachrichtenfluss (request-response). Es wird beschrieben, wie der Knoten die Eingabenachrichten verarbeitet (gemäß der von Ihnen festgelegten LocalEnvironment- und Eingabeparameter), um die Ausgabenachrichten zu erstellen.

Ein Anforderung-Antwort-Nachrichtenfluss zwischen zwei Anwendungen ermöglicht einer der Anwendungen, Nachrichten von der anderen anzufordern. Diese Art von Nachrichtenfluss wird in der nachfolgenden Abbildung veranschaulicht:

Die Abbildung wird im nachfolgenden Text beschrieben..

In der Abbildung stellt die anfordernde Anwendung eine Nachricht in die "Anforderungseingabewarteschlange" der antwortenden Anwendung ein. Anschließend verarbeitet die antwortende Anwendung die Nachricht und sendet eine Antwort an die "Antwortwarteschlange", die in der ursprünglichen Nachricht der anfordernden Anwendung angegeben wurde.

Wenn eine dieser Anwendungen ersetzt oder erweitert wird und die andere Anwendung unverändert bleibt, müssen die Nachrichten zwischen den beiden Anwendungen umgewandelt werden. Dazu kann der Broker zwischen die Anwendungen eingefügt werden (siehe nachfolgende Abbildung):

Die Abbildung wird im nachfolgenden Text beschrieben.

Nun wird ein Aliasname einer Warteschlange oder eine ähnliche Einheit so konfiguriert, dass die anfordernde Anwendung ihre Anforderungsnachricht in die Eingabewarteschlange des Nachrichtenflusses des Brokers "Koordinierte Anforderungsantwort" einstellt. Im vorangegangenen Beispiel wurde diese Nachricht direkt in die Eingabewarteschlange der antwortenden Anwendung eingestellt. Der Nachrichtenfluss "Koordinierte Anfrage-Antwort" wandelt die Nachricht in ein Format um, das die antwortende Anwendung unterstützt, und leitet sie an ihre Eingabewarteschlange weiter. Außerdem speichert er die ursprünglichen Details der Warteschlange für Antwortnachrichten der anfordernden Anwendung und stellt sie als Antwortnachricht der antwortenden Anwendung wieder her. Somit kann sie fehlerfrei zurück an die anfordernde Anwendung gesendet werden.

Ein MQAbrufknoten kann überall in einen Nachrichtenfluss gestellt werden und empfängt an seinem Eingabeterminal eine vom vorangehenden Knoten übergebene Eingabebaumstruktur. Anschließend erstellt er mit der aus der konfigurierten WebSphere MQ-Warteschlange abgerufenen Nachricht eine Ergebnisbaumstruktur. Schließlich verwendet er die Eingabe- und die Ergebnisbaumstruktur, um eine Ausgabebaumstruktur zu erstellen, die je nach Konfiguration des Knotens und abhängig vom Ergebnis der GET-Operation entweder an sein Ausgabeterminal, das Warnungsterminal oder das Fehlerterminal weitergegeben wird.

Weitere Details zum Erstellen eines Nachrichtenflusses finden Sie in folgendem Beispiel: Beispielprogramm 'Coordinated Request Reply'.

Verwendung der LocalEnvironment-Daten

Die vom vorangegangenen Knoten weitergegebene lokale Umgebung wird vom MQAbrufknoten gelesen und aktualisiert.

  • Die MQGMO-Struktur wird aus ${inputMQParmsLocation}.MQGMO.* gelesen.
  • MQ-Beendigungs- und -Ursachencodes werden in ${outputMQParmsLocation}.CC und .RC eingestellt.
  • Wenn in der lokalen Umgebung eine MQGMO-Baumstruktur vorhanden ist, wird sie mit den vom Knoten verwendeten Werten aktualisiert und an den nachgelagerten Knoten weitergegeben.
  • Wenn ${inputMQParmsLocation}.MQMD vorhanden ist, werden die an den MQGET-Aufruf übergebenen MQMD-Daten (mit den in der Eingabenachricht angegebenen oder von dem Knoten generierten Werten) an dieser Adresse abgelegt, wobei alle dort bereits vorhandenen Daten gelöscht werden.

Der Wert '${inputMQParmsLocation}' wurde auf der Registerkarte Anforderungseigenschaften in der Eigenschaft Position für MQ-Eingabeparameter des MQAbrufknotens eingerichtet.

Der Wert '${outputMQParmsLocation}' wurde auf der Registerkarte Ergebniseigenschaften in der Eigenschaft Position für MQ-Ausgabeparameter des MQAbrufknotens eingerichtet.

Ausführliche Informationen zu diesen Eigenschaften finden Sie unter MQAbrufknoten.

Zusammenfassung:
${inputMQParmsLocation}
  • QueueName: Optionale Überschreibung der Eigenschaft Name der Warteschlange des MQAbrufknotens.
  • InitialBufferSize: Optionale Überschreibung der Eigenschaft Anfängliche Puffergröße des MQAbrufknotens.
  • MQGMO.*: Optionale, vom MQAbrufknoten verwendete Optionen zum Abrufen von MQ-Nachrichten.
${outputMQParmsLocation}
  • CC: Beendigungscode des Aufrufs von MQ Get.
  • RC: Ergebniscode des Aufrufs von MQ Get.
  • MQGMO.*: Verwendung von Optionen zum Abrufen von MQ-Nachrichten, falls vorhanden, in ${inputMQParmsLocation}.
  • MQMD: MQ-Nachrichtendeskriptor für empfangene Nachrichten.

Erstellung der MQMD-Daten für den MQGet-Aufruf

  • Wenn Sie keinen Eingabe-MQMD übergeben, wird ein Standard-MQMD verwendet (siehe Beschreibung im Referenzhandbuch WebSphere MQ Application Programming Reference).
  • Wenn Sie einen Eingabe-MQMD übergeben, wird er auf eine der folgenden Arten verwendet:
    • Wenn das Attribut Vollständigen Eingabe-MQMD verwenden gesetzt ist, wird der Eingabe-MQMD in seiner Gesamtheit verwendet.
    • Wenn das Attribut Vollständigen Eingabe-MQMD verwenden nicht festgelegt ist, wird ein Standard-MQMD vorbereitet und, falls die Markierungsfelder Nachrichten-ID oder Korrelations-ID aktiviert sind, jede im Eingabe-MQMD gesetzte entsprechende ID in den Standard-MQMD kopiert.

Das folgende Diagramm zeigt etwas ausführlicher, wie der MQAbrufknoten den MQMD, der im Aufruf an WebSphere MQ verwendet werden soll, erstellt:

Das Diagramm wird oben im Text beschrieben.

Erstellung der Ausgabenachrichtenbaumstruktur

Das folgende Diagramm zeigt im Überblick, wie die Ausgabenachrichtenbaumstruktur erstellt wird, indem die Eingabebaumstruktur aus dem vorherigen Knoten mit der Ergebnisbaumstruktur aus dem MQGet-Aufruf kombiniert wird:

Das Diagramm wird oben im Text beschrieben.

Im nachfolgenden Beispiel werden die Eigenschaften des MQAbrufknotens wie aufgeführt konfiguriert:
copyMessage
copyEntireMessage
generateMode
message
outputDataLocation
OutputRoot.XML.A
resultDataLocation
ResultRoot.XML.C
In diesem Beispiel wird die Ausgabebaumstruktur wie folgt erstellt:
  1. Die gesamte Eingabebaumstruktur wird in die Ausgabebaumstruktur kopiert, einschließlich des XML-Zweiges mit dem untergeordneten Element A und dem A untergeordneten Element B.
  2. Das untergeordnete Element C und das C untergeordnete Element D im XML-Zweig werden aus der Ergebnisbaumstruktur an Position OutputRoot.XML.A in der Ausgabebaumstruktur abgelegt. Der bisherige Inhalt von A (Werte und untergeordnete Elemente) wird gelöscht und durch den Inhalt von C ersetzt, einschließlich aller Werte und untergeordneten Elemente (in diesem Fall des untergeordneten Elements D).
  3. Die Position in der Ausgabebaumstruktur behält den Namen A.
Das folgende Diagramm zeigt dies in einer anschaulichen Darstellung:

Das Diagramm wird oben im Text beschrieben.

Beispiele für Nachrichtenbaumstrukturen

Es folgen einige Beispiele, wie Nachrichtenbaumstrukturen gemäß den oben beschriebenen Regeln erstellt werden.

Tabelle 1. Beispiel für Input, LocalEnvironment und MQGet
Die Nachricht ist wie folgt aufgebaut: MQGet gibt folgende Nachricht zurück:
InputRoot
MQMD
{Eingabenachricht-MQMD}
MQRFH2
{Eingabenachricht-MQRFH2}
XMLNS
{Eingabenachricht-Hauptteil}
InputLocalEnvironment
MQ
GET
MQGMO
MatchOptions = MQMO_MATCH_CORREL_ID
MQMD (ohne untergeordnete Elemente)
MyData
MQMD
{Eingabe-MQMD} (mit CorrelID = {richtige Korrelations-ID in Binärformat})
Beginn der Änderung
ResultRoot
MQMD
{Ergebnisnachricht-MQMD}
MQRFH2
{Ergebnisnachricht-MQRFH2}
XML
{Ergebnisnachricht-Hauptteil}
Ende der Änderung
Tabelle 2. Beispiel mit resultierenden Ausgabenachrichtbaumstrukturen, entsprechend den Eigenschaftendetails des MQAbrufknotens.
Bei folgenden Einstellungen ist die erstellte Ausgabenachricht wie folgt aufgebaut:
inputMQMDLocation
InputLocalEnvironment.MyData.MQMD
copyMessage
copyEntireMessage
copyLocalEnv
copyEntireLocalEnvironment
generateMode
messageAndLocalEnvironment
outputDataLocation
InputLocalEnvironment.MyData.ReturnedMessage
OutputRoot
MQMD
{Eingabenachricht-MQMD}
MQRFH2
{Eingabenachricht-MQRFH2}
XMLNS
{Eingabenachricht-Hauptteil}
OutputLocalEnvironment
MQ
GET
MQGMO
{für GET verwendetes MQGMO}
MQMD
{für GET verwendeter MQMD}
CC = 0
RC = 0
MyData
MQMD
{Eingabe-MQMD} (mit CorrelID = {richtige Korrelations-ID in Binärformat})
ReturnedMessage
MQMD
{Ergebnisnachricht-MQMD}
MQRFH2
{Ergebnisnachricht-MQRFH2}
XML
{Ergebnisnachricht-Hauptteil}
resultDataLocation
ResultRoot.XML
OutputRoot
MQMD
{Eingabenachricht-MQMD}
MQRFH2
{Eingabenachricht-MQRFH2}
XMLNS
{Eingabenachricht-Hauptteil}
OutputLocalEnvironment
MQ
GET
MQGMO
{für GET verwendetes MQGMO}
MQMD
{für GET verwendeter MQMD}
CC = 0
RC = 0
MyData
MQMD
{Eingabe-MQMD} (mit CorrelID = {richtige Korrelations-ID in Binärformat})
ReturnedMessage (mit allen Attributen und Werten aus ResultRoot.XML)
{Ergebnisnachricht-Hauptteil}

Diese Baumstruktur ist das effektive Ergebnis einer Zuordnung von ${resultDataLocation} zu ${outputDataLocation}. Der Wert des Quellenelements wird kopiert, ebenso alle untergeordneten Elemente, einschließlich der Attribute.

copyLocalEnv
none
OutputRoot
MQMD
{Eingabenachricht-MQMD}
MQRFH2
{Eingabenachricht-MQRFH2}
XMLNS
{Eingabenachricht-Hauptteil}
OutputLocalEnvironment
MQ
GET
MQGMO
{für GET verwendetes MQGMO}
MQMD
{für GET verwendeter MQMD}
CC = 0
RC = 0
MyData
ReturnedMessage (mit allen Attributen und Werten aus ResultRoot.XML)
{Ergebnisnachricht-Hauptteil}

In dieser Baumstruktur wird der MQMD für den GET-Aufruf in OutputLocalEnvironment verwendet, weil sich an der Position mit den MQ-Eingabeparametern ein untergeordnetes MQMD-Element befindet. Zwar wird die Eingabebaumstruktur nicht kopiert, die Anwesenheit des MQMD-Elements sorgt jedoch dafür, dass der für den GET-Aufruf verwendete MQMD in der Ausgabebaumstruktur abgelegt wird.

outputDataLocation
<blank>
copyLocalEnv
copyEntireLocalEnvironment
OutputRoot
MQMD
{Ergebnisnachricht-MQMD}
MQRFH2
{Ergebnisnachricht-MQRFH2}
XMLNS
{Ergebnisnachricht-Hauptteil}
OutputLocalEnvironment
MQ
GET
MQGMO
{für GET verwendetes MQGMO}
MQMD
{für GET verwendeter MQMD}
CC = 0
RC = 0
MyData
MQMD
{Eingabe-MQMD} (mit CorrelID = {richtige Korrelations-ID in Binärformat})

Die Einstellung von copyMessage hat in diesem Fall keine Auswirkung auf die erstellte Ausgabebaumstruktur.

Zugehörige Konzepte
Nachrichtenflüsse - Übersicht
Bemerkungen | Marken | Downloads | Bibliothek | Unterstützung | Rückmeldung
Copyright IBM Corporation 1999, 2006 Letzte Aktualisierung: 23. Aug. 2006
ac34680_