集約フローを使用する場合、例外が生じることがあります。
以下のタスクを実行します。
AggregateReply ノードの下流でエラーが検出されると、ブローカーは例外を発行します。 また、メッセージ・フロー内の別のノードも、ESQL THROW ステートメントを使用して例外を発行することがあります。 いずれの場合にも、例外が起きると、以下の 2 つの場所のどちらかでキャッチされます。
以下の表は、イベントをリストし、AggregateReply ノードの下流で例外が起きたらどうなるかを説明しています。
イベント | 伝搬されるメッセージ | 出力ターミナル | 例外がキャッチされる場所 |
---|---|---|---|
想定内の応答が入力ノードに到着し、AggregateReply ノードの In ターミナルに渡される。 この応答は、集約の完成に必要な最後の応答です。 | すべての応答を含む集約された応答メッセージ | Out | Input ノード |
想定外の応答が入力ノードに到着し、AggregateReply ノードに渡される。 応答は、有効な応答と認識されず、「不明なメッセージ・タイムアウト」プロパティーは 0 に設定される。 | 受け取られたメッセージ | Unknown | Input ノード |
集約のすべての応答がまだ到着していないのでタイムアウトが生じる。 | 受け取ったすべての応答を含む集約された応答メッセージ | Timeout | AggregateReply ノード |
保存メッセージは有効な応答と識別されないので、不明タイムアウトが生じる。 | 保持されたメッセージ | Unknown | AggregateReply ノード |
最後の応答が到着したとき以外に、集約の完成したことが判明した。 | すべての応答を含む集約された応答メッセージ | Out | AggregateReply ノード |
集約フローで生じるエラーを処理するには、メッセージ・フローのそれぞれのノードのすべてのインスタンスにおいて、これらの例外をキャッチする必要があります。
以下の ESQL の例は、MQMD ヘッダーを追加して、AggregateReply ノードが受信する応答を渡す方法を示しています。
-- Add MQMD SET OutputRoot.MQMD.Version = 2; . -- Include consolidated replies in the output message SET OutputRoot.XMLNS.Data.Parsed = InputRoot.ComIbmAggregateReplyBody; .
例外についての情報を出力メッセージで伝搬するには、 Compute ノードの 「計算モード」プロパティーに、「例外」を含む値を設定する必要があります。