集約フローを使用する場合、例外が生じることがあります。このトピックでは、この対処方法について説明します。
始める前に:
このタスクを完了するには、以下のタスクを完了している必要があります。
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.XML.Data.Parsed = InputRoot.ComIbmAggregateReplyBody; .
例外についての情報を出力メッセージで伝搬したい場合は、 Compute ノードの 「計算モード」プロパティーに 「例外」 を含む値を設定する必要もあります。