WebSphere® MQ から受け取ったメッセージの順序を変更し、XML メッセージで定義されているシーケンス番号に基づいて正しい順序でメッセージを伝搬します。
この例の作業では、開始シーケンス番号 0 (デフォルト)、終了シーケンス番号 8 でシーケンスを定義します。メッセージ・フローの構成では、メッセージの着信は順不同としますが、いずれかのシーケンス番号が着信しない場合でも、順不同のままでは伝搬できない、という構成内容にします。
ここでは、WebSphere MQ から XML 文書を受け取り、XML メッセージで定義されているシーケンス番号に基づいてメッセージを再配列し (この例では、パス $Root/XMLNSC/Doc/SeqNo を使用)、WebSphere MQ キューにその文書を書き込むメッセージ・フローを作成する手順を説明します。
- Resequence_Task1 というメッセージ・フローを作成し、MQInput ノード、Resequence ノード、MQOutput ノードを組み込みます。 これを行う方法の詳細は、メッセージ・フローの作成を参照してください。
- MQInput ノードの Out ターミナルを Resequence ノードの In ターミナルに接続します。
- Resequence ノードの Out ターミナルを MQOutput ノードの In ターミナルに接続します。
- MQInput ノードの以下のプロパティーを設定します。
- 「基本」タブで、「キュー名」プロパティーを RESEQUENCE_TASK1_IN1 に設定します。
- 「入力メッセージの構文解析」タブで、「メッセージ・ドメイン」プロパティーを XMLNSC に設定します。
- Resequence ノードの「基本」タブで、以下のプロパティーを設定します。
- 「シーケンス番号へのパス」プロパティーを $Root/XMLNSC/Doc/SeqNo に設定します。
- 「シーケンス定義の終了」プロパティーを「リテラル」に設定し、値 8 を指定します。
- MQOutput ノードの「基本」タブにある「キュー名」プロパティーを RESEQUENCE_TASK1_OUT1 に設定します。
- メッセージ・フローを保存します。
メッセージ・フローのメッセージ処理:
このセクションでは、メッセージ・フローに入ったメッセージを Resequence ノードがどのように処理するのかを説明します。
- 以下のようなメッセージが WebSphere MQ キュー RESEQUENCE_TASK1_IN1 に着信します。
<Doc><SeqNo>0</SeqNo></Doc>,<Doc><SeqNo>1</SeqNo></Doc>,<Doc><SeqNo>2</SeqNo></Doc>,
<Doc><SeqNo>3</SeqNo></Doc>,<Doc><SeqNo>4</SeqNo></Doc>,<Doc><SeqNo>5</SeqNo></Doc>,
<Doc><SeqNo>6</SeqNo></Doc>,<Doc><SeqNo>7</SeqNo></Doc>,<Doc><SeqNo>8</SeqNo></Doc>,
- Resequence ノードは、まずシーケンス番号 0 のメッセージを受け取ります。Resequence ノードは、再配列プロセスを管理するための新しいシーケンス・グループを作成します。その新しいシーケンス・グループは、デフォルト・グループです。メッセージでは、シーケンス・グループが定義されていないからです。 そのシーケンス番号 0 のメッセージがシーケンスの最初のメッセージになり、Out ターミナルに伝搬します。
- Resequence ノードは、残りのメッセージ (シーケンス番号 8 までのメッセージ) を受け取り、着信順に伝搬します。
Resequence ノードは、各メッセージを伝搬する前にいったん保管し、別々のトランザクションを使用して各メッセージを下流に伝搬します。
- シーケンス番号 8 のメッセージが処理された時点で、そのシーケンス・グループは閉じます。 その後、同じグループの新しいメッセージが着信すると、新しいグループが作成されます。
- 次に、以下のようなメッセージが RESEQUENCE_TASK1_IN1 キューに着信します。
<Doc><SeqNo>8</SeqNo></Doc>,<Doc><SeqNo>7</SeqNo></Doc>,<Doc><SeqNo>6</SeqNo></Doc>,
<Doc><SeqNo>5</SeqNo></Doc>,<Doc><SeqNo>4</SeqNo></Doc>,<Doc><SeqNo>3</SeqNo></Doc>,
<Doc><SeqNo>2</SeqNo></Doc>,<Doc><SeqNo>1</SeqNo></Doc>,<Doc><SeqNo>0</SeqNo></Doc>,
- Resequence ノードは、まずシーケンス番号 8 のメッセージを受け取ります。その時点で、Resequence ノードは、新しい (デフォルトの) シーケンス・グループを作成します。 そのメッセージは、シーケンスの最後のメッセージなので、伝搬しないで、内部に保管します。
- Resequence ノードは、残りのメッセージ (シーケンス番号 0 までのメッセージ) を受け取ります。最初のシーケンス番号 (この場合は 0) を受け取るまで、すべてのメッセージを伝搬しないで保管します。
- シーケンス番号 0 のメッセージを受け取ると、そのメッセージをメッセージ・フローの下流に伝搬します。残りのメッセージを順番に伝搬していき、最後にシーケンス番号 8 のメッセージを伝搬します。
その時点で、シーケンス・グループは再び閉じます。