Das Beispielprogramm 'Coordinated Request Reply'

Das Beispielprogramm 'Coordinated Request Reply' ist eine Beispielanwendung eines Nachrichtenflusses, die durch die Verwendung von WebSphere MQ-Nachrichten in einem Request/Reply-Verarbeitungsmuster auf dem Szenario einer modernen und etablierten Anwendungskommunikation basiert. Die moderne Anwendung verwendet selbstdefinierende XML-Nachrichten und gibt eine Anforderungsnachricht aus. Die etablierte Anwendung verwendet Nachrichten im CW-Format. Sie empfängt eine Anforderungsnachricht, verarbeitet diese und liefert eine Antwortnachricht. Damit die Anwendungen erfolgreich kommunizieren können, müssen die Nachrichtenformate sowohl für die Anforderungs- als auch für die Antwortnachrichten umgewandelt werden.

Das Beispielprogramm zeigt, wie die Umwandlung von selbstdefinierenden XML-Nachrichten in selbstdefinierende CWF-Nachrichten und umgekehrt durchgeführt werden kann. Außerdem wird gezeigt, wie Informationen in einem Nachrichtenfluss gespeichert und von einem anderen abgerufen werden können. In dem Beispielprogramm ist es nötig, ReplyToQ und ReplyToQMgr von der ersten Anforderungsnachricht für die Verwendung zu bewahren, wenn die entsprechende Anforderungsnachricht empfangen wird. Im Szenario wird eine WebSphere MQ-Nachricht verwendet, um die Details zu speichern.

Die Verarbeitung im Beispielprogramm besteht aus drei Nachrichtenflüssen und einer Nachrichtengruppe.   Die Nachrichtenflüsse lauten:

Das Beispielprogramm 'Message Set' MSET mit der Nachrichtendefinition 'SaleListMessage' wird bei der Konvertierung der Nachricht vom XML- in das CW-Format im Anforderungsabschnitt der Verarbeitung verwendet. Bei der Konvertierung der Nachricht vom CW- in das XML-Format wird es im Antwortabschnitt der Verarbeitung verwendet.

Details zu den Nachrichtenflüssen und der Verarbeitung, die durch sie ausgeführt wird, werden unten aufgeführt.

Anforderungsnachrichtenfluss

Der Anforderungsnachrichtenfluss führt folgende Verarbeitung aus:

Der Anforderungsnachrichtenfluss besteht aus den folgenden Knoten:

Der Anforderungsnachrichtenfluss

Der MQEmpfangsknoten 'GetRequestMsg' liest die XML-Nachricht. Da die eingehende Nachricht in einem selbstdefinierenden XML-Format ist, ist es nicht erforderlich, eine Nachrichtengruppe oder ein Nachrichtenformat anzugeben, damit sie erfolgreich syntaktisch analysiert werden kann.

Der untergeordnete Nachrichtenfluss 'StoreOriginalMQMD_Sub' bindet das Speichern der ReplyToQ- und ReplyToQMgr-Werte in eine WebSphere MQ-Nachricht ein. Dies geschieht aus zweierlei Gründen: Erstens, damit die Verarbeitungslogik leicht in anderen Nachrichtenflüssen wiederverwendet werden kann und zweitens, damit alternative Implementierungen eingesetzt werden können. Es könnte beispielsweise eine alternative Implementierung erstellt werden, die einen Datenbankknoten verwendet.

Der Rechenknoten 'TransformAndSetReplyTo' führt folgende Aktionen aus:

  1. Er kopiert die Nachrichtenheader von der Eingabenachricht in die Baumstruktur der Ausgabenachricht.
  2. Er führt die Konvertierung der Eingabenachricht vom XML-Format in das CW-Format aus.
  3. Er setzt die Nachrichtengruppe, den Typ und das Format für die Ausgabenachricht.
  4. Er legt die ReplyToQ für die neue Nachricht als jene der Eingabewarteschlange für den Antwortnachrichtenfluss fest.

Der MQSendeknoten 'OutputRequestMsg' schreibt die WebSphere MQ-Ausgabenachricht.

Back-End-Antwortnachrichtenfluss

Der Back-End-Antwortnachrichtenfluss führt folgende Verarbeitung aus:

  1. Lesen einer WebSphere MQ-Nachricht.
  2. Hinzufügen der Änderungszeit der Nachricht zu den Nutzdaten der Nachricht.
  3. Schreiben einer WebSphere MQ-Nachricht.

Der Back-End-Antwortnachrichtenfluss besteht aus den folgenden Knoten:

Der Ausgabeprogrammnachrichtenfluss

Der MQEmpfangsknoten 'GetRequestMsg' liest die CWF-Nachricht. Die Nachrichtengruppe, das Format, und die Domäne, die zur syntaktischen Analyse der eingehenden Nachricht benötigt werden, werden auf dem MQEmpfangsknoten angegeben.

Der Rechenknoten 'Backend_Computation' führt folgende Aktionen aus:

  1. Er kopiert die vollständige Eingabenachricht in die Baumstruktur der Ausgabenachricht.
  2. Er erhält die aktuelle Zeit vom Nachrichtenbroker und formatiert sie erneut.
  3. Er fügt die neu formatierte Zeit der Baumstruktur der Ausgabenachricht hinzu.

Der MQSendeknoten 'PutReplyMsg' schreibt die WebSphere MQ-Ausgabenachricht.

Antwortnachrichtenfluss

Der Antwortnachrichtenfluss führt folgende Verarbeitung aus:

  1. Er liest eine WebSphere MQ-Nachricht, die eine Nachricht im CW-Format enthält.
  2. Er wandelt die Nachricht in das entsprechende XML-Format um.
  3. Er erhält die ReplyToQ und den ReplyToQMgr der ursprünglichen Anforderungsnachricht, indem er die WebSphere MQ-Nachricht liest, die zum Speichern dieser Informationen im Anforderungsnachrichtenfluss verwendet wurde. Dies geschieht mit Hilfe des MQAbrufknotens.
  4. Er erstellt eine WebSphere MQ-Nachricht, die die umgewandelte Nachricht und die abgerufenen ReplyToQ- und ReplyToQMgr-Werte enthält.

Der Antwortnachrichtenfluss besteht aus den folgenden Knoten:

Der Antwortnachrichtenfluss

Der MQEmpfangsknoten 'GetBackendReply' liest die CWF-Nachricht. Die Nachrichtengruppe, das Format, und die Domäne, die zur syntaktischen Analyse der eingehenden Nachricht benötigt werden, werden auf dem MQEmpfangsknoten angegeben.

Der Rechenknoten 'MapToRequestor' führt folgende Aktionen aus:

  1. Er kopiert die Nachrichtenheader von der Eingabenachricht in die Baumstruktur der Ausgabenachricht.
  2. Er führt die Konvertierung der Eingabenachricht vom CW-Format in das XML-Format durch.

Der untergeordneter Nachrichtenfluss 'RestoreOriginalMQMD_Sub' bindet die Abfrage der ReplyToQ- und ReplyToQMgr-Werte ein. Er liest die WebSphere MQ-Nachricht, die die ReplyToQ- und ReplyToQMgr-Werte enthält, die in der ursprünglichen Anforderungsnachricht angegeben wurden, und kopiert diese in die Antwortnachricht. Der Lesevorgang geschieht mit Hilfe des MQAbrufknotens. Der MQAbrufknoten ist konfiguriert, um die entsprechende Nachricht über die CorrelId auszuwählen und um die ursprüngliche Anforderungs-MQMD in die MQMD der Nachricht zu kopieren, die verarbeitet wird. Dies dient der Übertragung der Antwortnachricht von der etablierten Anwendung auf die korrekte Anforderungsanwendung. Der MQAbrufknoten ruft außerdem die Nutzdaten der WebSphere MQ-Nachricht ab, die zum Speichern der ursprünglichen Werte von ReplyToQ und ReplyToQMgr verwendet wurde.

Der MQSendeknoten 'PutOriginalReply' schreibt die WebSphere MQ-Ausgabenachricht.

Testnachricht

Bei der Testnachricht, die im Beispielprogramm 'Coordinated Request Reply' verwendet wird, handelt es sich um eine einfache XML-Nachricht, die Rechnungsdetails für einen Kunden enthält. Während der Ausführung des Beispielprogramms wird diese XML-Nachricht in das CW-Format umgewandelt. Der Feldwert für CompletionTime ist der einzige Wert, der sich während der Ausführung des Beispielprogramms ändert. Die Nachricht ist unten dargestellt.

<SaleEnvelope>
<Header>
<SaleListCount>1</SaleListCount>
</Header>
<SaleList>
<Invoice>
<Initial>K</Initial>
<Initial>A</Initial>
<Surname>Braithwaite</Surname>
<Item>
<Code>00</Code>
<Code>01</Code>
<Code>02</Code>
<Description>Twister</Description>
<Category>Games</Category>
<Price>00.30</Price>
<Quantity>01</Quantity>
</Item>
<Item>
<Code>02</Code>
<Code>03</Code>
<Code>01</Code>
<Description>The Times Newspaper</Description>
<Category>Books and Media</Category>
<Price>00.20</Price>
<Quantity>01</Quantity>
</Item>
<Balance>00.50</Balance>
<Currency>Sterling</Currency>
</Invoice>
<Invoice>
<Initial>T</Initial>
<Initial>J</Initial>
<Surname>Dunnwin</Surname>
<Item>
<Code>04</Code>
<Code>05</Code>
<Code>01</Code>
<Description>The Origin of Species</Description>
<Category>Books and Media</Category>
<Price>22.34</Price>
<Quantity>02</Quantity>
</Item>
<Item>
<Code>06</Code>
<Code>07</Code>
<Code>01</Code>
<Description>Microscope</Description>
<Category>Miscellaneous</Category>
<Price>36.20</Price>
<Quantity>01</Quantity>
</Item>
<Balance>81.84</Balance>
<Currency>Euros</Currency>
</Invoice>
</SaleList>
<Trailer>
<CompletionTime>12.00.00</CompletionTime>
</Trailer>
</SaleEnvelope>

Symbol für die Hauptseite   Zurück zum Beginn des Beispielprogramms