Coordinated Request Reply サンプルについて

Coordinated Request Reply サンプルは、最新のアプリケーションと従来のアプリケーションとが、 要求/応答の処理パターンで WebSphere MQ メッセージを使用して通信するというシナリオに基づいた、 メッセージ・フロー・サンプル・アプリケーションです。最新のアプリケーションは自己定義型 XML メッセージを使用して要求メッセージを発行します。従来のアプリケーションは、カスタム・ワイヤー形式 (CWF) のメッセージを使用し、要求メッセージを受け取って処理し、応答メッセージを配信します。これらのアプリケーションが正常に通信するには、要求メッセージと応答メッセージの両方のメッセージ・フォーマットを変換しなければなりません。

このサンプルでは、自己定義型 XML メッセージと CWF メッセージの間で変換を行う方法の例を示します。さらにこのサンプルでは、どうすれば一方のメッセージ・フローで保管した情報を、別のメッセージ・フローで取り出せるかも示します。このサンプルでは、最初の要求メッセージの ReplyToQ と ReplyToQMgr を保存しておき、対応する応答メッセージを受信するときに使用できるようにしておく必要があります。このシナリオでは、詳細を保管するために WebSphere MQ メッセージを使用します。

サンプルの処理は、3 つのメッセージ・フローと 1 つのメッセージ・セットで構成されています。メッセージ・フローは、以下のとおりです。

処理の要求セクションにおける XML 形式から CWF へのメッセージ変換、および処理の応答セクションにおける CWF から XML への変換では、メッセージ・セット Sample MSET とメッセージ定義 SaleListMessage を使用します。

メッセージ・フローの詳細と、メッセージ・フローで実行される処理について、以下に説明します。

Request メッセージ・フロー

Request メッセージ・フローでは、以下の処理を実行します。

Request メッセージ・フローは、以下のノードから構成されています。

Request メッセージ・フロー

MQInput ノード GetRequestMsg は XML メッセージを読み取ります。着信メッセージは自己定義型 XML 形式なので、メッセージが正常に解析されるようにメッセージ・セットやメッセージ・フォーマットを指定する必要はありません。

サブフロー StoreOriginalMQMD_Sub は、WebSphere MQ メッセージへの ReplyToQ 値と ReplyToQMgr 値の保管をカプセル化します。 カプセル化する理由は 2 つあります。  1 つ目の理由は、処理ロジックを他のメッセージ・フローで簡単に再利用できるようにするためです。2 つ目の理由は、代替インプリメンテーションに置き換えることができるようにするためです。例えば、データベース・ノードを使用する代替インプリメンテーションを作成できるかもしれません。

Compute ノード TransformAndSetReplyTo の実行するアクションは、次のとおりです。

  1. 入力メッセージから出力メッセージ・ツリーにメッセージ・ヘッダーをコピーします。
  2. 入力メッセージを XML 形式から CWF に変換します。 
  3. 出力メッセージのメッセージ・セット、タイプ、および形式を設定します。
  4. 新しいメッセージの ReplyToQ が、Reply メッセージ・フローの入力キューのものになるように設定します。

MQOutput ノード OutputRequestMsg は、WebSphere MQ 出力メッセージを書き出します。

Backend Reply メッセージ・フロー

Backend Reply メッセージ・フローでは、以下の処理を実行します。

  1. WebSphere MQ メッセージを読み取ります。
  2. メッセージが変更された時刻をメッセージのペイロードに追加します。
  3. WebSphere MQ メッセージを書き出します。

Backend Reply メッセージ・フローは、以下のノードから構成されています。

Backend Reply メッセージ・フロー

MQInput ノード GetRequestMsg は CWF メッセージを読み取ります。 着信メッセージを解析するために必要なメッセージ・セット、フォーマット、およびドメインは、MQInput ノードで指定されます。

Compute ノード Backend_Computation の実行するアクションは、次のとおりです。

  1. 入力メッセージ全体を出力メッセージ・ツリーにコピーします。
  2. Message Broker から現在時刻を入手して、再フォーマットします。
  3. 出力メッセージ・ツリーに再フォーマットの時間を追加します。

MQOutput ノード PutReplyMsg は、WebSphere MQ 出力メッセージを書き出します。

Reply メッセージ・フロー

Reply メッセージ・フローでは、以下の処理を実行します。

  1. CWF 形式のメッセージが入った WebSphere MQ メッセージを読み取ります。
  2. メッセージを等価の XML 形式に変換します。
  3. 元の要求メッセージの ReplyToQ と ReplyToQMgr を入手します。これは、この情報を Request メッセージ・フローに保管するのに使用した WebSphere MQ メッセージを読み取ることによって行います。この処理は、MQGet ノードを使用して行われます。
  4. 変換されたメッセージと、取り出された ReplyToQ および ReplyToQMgr 値とが入った WebSphere MQ メッセージを作成します。

Reply メッセージ・フローは、以下のノードから構成されています。

Reply メッセージ・フロー

MQInput ノード GetBackendReply は CWF メッセージを読み取ります。 着信メッセージを解析するために必要なメッセージ・セット、フォーマット、およびドメインは、MQInput ノードで指定されます。

Compute ノード MapToRequestor の実行するアクションは、次のとおりです。

  1. 入力メッセージから出力メッセージ・ツリーにメッセージ・ヘッダーをコピーします。
  2. 入力メッセージを CWF 形式から XML に変換します。

サブフロー RestoreOriginalMQMD_Sub は、ReplyToQ 値と ReplyToQMgr 値の取り出しをカプセル化します。このサブフローは、元の要求メッセージで指定された ReplyToQ と ReplyToQMgr の値が入った WebSphere MQ メッセージを読み取り、これらの値を応答メッセージにコピーします。 このサブフローは、MQGet ノードを使用して読み取りを行います。 MQGet ノードは、相関 ID によって対応するメッセージを選択し、処理されるメッセージの MQMD に元の要求 MQMD をコピーするように構成されています。これは、従来のアプリケーションから正しいリクエスター・アプリケーションに応答メッセージを送信するためです。 MQGet ノードは、ReplyToQ と ReplyToQMgr の元の値を保管するために使用された WebSphere MQ メッセージのペイロードの 取り出しも行います。

MQOutput ノード PutOriginalReply は、WebSphere MQ 出力メッセージを書き出します。

テスト・メッセージ

Coordinated Request Reply サンプルで使用されるテスト・メッセージは、顧客の送り状明細が入った単純な XML メッセージです。 サンプルの実行中に、この XML メッセージは CWF 形式に変換されます。 CompletionTime フィールド値だけが、サンプルの実行中に変更される値です。 以下にこのメッセージを示します。

<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>

メインページのアイコン   サンプルのホームに戻る