WebSphere Message Broker バージョン 8.0.0.5 オペレーティング・システム: AIX、HP-Itanium、Linux、Solaris、Windows、z/OS

製品の最新バージョンについては、IBM Integration Bus バージョン 9.0 をご覧ください。

メッセージ・シーケンスのシナリオ 2

WebSphere® MQ から受け取ったメッセージの順序を変更し、XML メッセージで定義されているシーケンス番号に基づいて正しい順序でメッセージを伝搬します。

始める前に:

メッセージ・シーケンスに関する概念トピックに目を通しておきます。

この例の作業では、開始シーケンス番号 0 (デフォルト) でシーケンスを定義します。そのシーケンスは、グループの新しいメッセージを 60 秒間受け取らなかった時点で終了します。 メッセージ・フローの構成では、メッセージの着信は順不同としますが、伝搬に関しては、Resequence ノードが正しい順序で各メッセージを伝搬しようとする、という構成内容にします。 シーケンス内の必要なメッセージが 10 秒以内に着信しないと、Resequence は、その欠落メッセージをスキップし、たとえ順序が乱れるとしてもシーケンス内の次のメッセージを伝搬します。

ここでは、WebSphere MQ から XML 文書を受け取り、XML メッセージで定義されているシーケンス番号に基づいてメッセージを再配列し (この例では、パス $Root/XMLNSC/Doc/SeqNo を使用)、WebSphere MQ キューにその文書を書き込むメッセージ・フローを作成する手順を説明します。

  1. Resequence_Task2 というメッセージ・フローを作成し、MQInput ノード、Resequence ノード、MQOutput ノードを組み込みます。 これを行う方法の詳細は、メッセージ・フローの作成を参照してください。
  2. MQInput ノードの Out ターミナルを Resequence ノードの In ターミナルに接続します。
  3. Resequence ノードの Out、Missing、Expire の各ターミナルを MQOutput ノードの In ターミナルに接続します。
    MQInput、Resequence、MQOutput の各ノードで構成されているメッセージ・フロー
  4. MQInput ノードの以下のプロパティーを設定します。
    1. 「基本」タブで、「キュー名」プロパティーを RESEQUENCE_TASK2_IN1 に設定します。
    2. 「入力メッセージの構文解析」タブで、「メッセージ・ドメイン」プロパティーを XMLNSC に設定します。
  5. Resequence ノードの「基本」タブで、以下のプロパティーを設定します。
    1. 「シーケンス番号へのパス」プロパティーを $Root/XMLNSC/Doc/SeqNo に設定します。
    2. 「欠落しているメッセージ・タイムアウト」プロパティーを 10 に設定します。
    3. 「シーケンス定義の終了」プロパティーを、値 60「自動」に設定します。
  6. MQOutput ノードで、「キュー名」プロパティー (「基本」 タブ上) を RESEQUENCE_TASK2_OUT1 に設定します。
  7. メッセージ・フローを保存します。

メッセージ・フローのメッセージ処理:

このセクションでは、メッセージ・フローに入ったメッセージを Resequence ノードがどのように処理するのかを説明します。

  1. 以下のようなメッセージが WebSphere MQ キュー RESEQUENCE_TASK2_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>,
  2. Resequence ノードは、まずシーケンス番号 0 のメッセージを受け取ります。Resequence ノードは、再配列プロセスを管理するための新しいシーケンス・グループを作成します。その新しいシーケンス・グループは、デフォルト・グループです。メッセージでは、シーケンス・グループが定義されていないからです。 そのシーケンス番号 0 のメッセージがシーケンスの最初のメッセージになり、Out ターミナルに伝搬します。
  3. Resequence ノードは、残りのメッセージ (シーケンス番号 8 までのメッセージ) を受け取り、着信順に伝搬します。 Resequence ノードは、各メッセージを伝搬する前にいったん保管し、別々のトランザクションを使用して各メッセージを下流に伝搬します。
  4. 60 秒が経過し、シーケンス・グループが閉じます。
  5. 次に、以下のようなメッセージが WebSphere MQ キュー RESEQUENCE_TASK2_IN1 に着信します。
    <Doc><SeqNo>0</SeqNo></Doc>,<Doc><SeqNo>3</SeqNo></Doc>,<Doc><SeqNo>2</SeqNo></Doc>,
    <Doc><SeqNo>4</SeqNo></Doc>,<Doc><SeqNo>6</SeqNo></Doc>,<Doc><SeqNo>7</SeqNo></Doc>,
  6. Resequence ノードは、まずシーケンス番号 0 のメッセージを受け取ります。その時点で、Resequence ノードは、新しい (デフォルトの) シーケンス・グループを作成し、シーケンス番号 0 のメッセージを Out ターミナルに伝搬します。
  7. 次のメッセージのシーケンス番号は 3 です (つまり、ここで順序が乱れています)。 Resequence ノードの「欠落しているメッセージ・タイムアウト」プロパティーには 10 秒という値が設定されているので、そのタイマーがスタートします。
  8. シーケンス番号 2 が着信します。このメッセージもやはり次の必要なメッセージではありませんが、現時点で保管されている最小のシーケンス番号よりも小さいシーケンス番号のメッセージなので、欠落メッセージのタイマーがリセットされます。
  9. Resequence ノードは、残りのメッセージを受け取ります。いずれも、2 よりも大きいシーケンス番号のメッセージです。したがって、それらのメッセージを伝搬しないで保管します。 今回は、それぞれのシーケンス番号が 2 よりも大きいので、欠落メッセージのタイマーはリセットされません。
  10. シーケンス番号 1 は、指定の期間内に着信しません。10 秒が経過した時点でタイムアウト期間の有効期限が切れます。
  11. Resequence ノードは、保管していたすべてのメッセージを伝搬します。つまり、最小のシーケンス番号 (この場合は 2) から次の欠落シーケンス番号までのすべてのメッセージです (この場合は、シーケンス番号 3 と 4 のメッセージになります)。 つまり、メッセージ 2、3、4 を Expire ターミナルに伝搬します。
  12. Resequence ノードは、このシーケンス・グループに関して順不同状態に移ります。したがって、このグループのメッセージを Out ターミナルに伝搬することはありません。 Resequence ノードは、そのシーケンス・グループの有効期限が切れてグループが閉じるまで、そのグループに関しては順不同状態のままになります。
  13. さらに 10 秒が経過し、欠落メッセージのタイマーの有効期限が再び切れた時点で、メッセージ 6 と 7 を Expire ターミナルに伝搬します。 この時点で、欠落メッセージがなくなったので、欠落メッセージのタイマーは再開しません。
  14. グループの有効期限タイマーがスタートし、60 秒が経過すると、グループが閉じます。 グループの有効期限タイマーは、欠落メッセージのタイマーが稼働している間はスタートしません。
特記事項 | 商標 | ダウンロード | ライブラリー | サポート | フィードバック

Copyright IBM Corporation 1999, 2014Copyright IBM Corporation 1999, 2014.

        
        最終更新:
        
        最終更新: 2015-02-28 17:48:39


タスク・トピックタスク・トピック | バージョン 8.0.0.5 | bc28025_