3.3.4 報告メッセージ
報告メッセージは,メッセージ処理時のエラー発生などのイベントを,アプリケーションに知らせます。報告メッセージは次に示すプロセスによって生成されます。
-
キューマネジャ
-
メッセージチャネルエージェント(メッセージを転送できないときなど)
-
アプリケーション(メッセージ内のデータを使用できないときなど)
報告メッセージが生成されるタイミングは任意であり,キューに登録されます。
- 〈この項の構成〉
(1) 報告メッセージの種類
メッセージをキューに登録するとき,次に示すメッセージの受信を選択できます。
-
例外報告メッセージ。このメッセージは例外フラグが設定されたメッセージに対して送信されます。メッセージチャネルエージェントまたはアプリケーションによって生成されます。
-
保持時間報告メッセージ。保持時間が経過したメッセージをアプリケーションで取り出そうとしたことを示します。メッセージは破棄されます。この報告はキューマネジャによって生成されます。
-
メッセージ到着確認(COA)報告メッセージ。メッセージがあて先のキューに到着したことを示します。キューマネジャによって生成されます。
-
メッセージ配布確認(COD)報告メッセージ。受信側アプリケーションによってメッセージが取り出されたことを示します。キューマネジャによって生成されます。
-
肯定動作の通知(PAN)報告メッセージ。メッセージで要求した動作が実行されたことを示します。この報告はアプリケーションによって生成されます。
-
否定動作の通知(NAN)報告メッセージ。メッセージで要求した動作が実行されなかったことを示します。この報告はアプリケーションによって生成されます。
- 注意
-
各種の報告メッセージは,次に示すどれかに該当します。
-
元のメッセージを持っています。
-
元のメッセージのデータから先頭100バイトを持っています。
-
元のメッセージからのデータを持っていません。
-
メッセージをキューに登録するときには,1種類以上の報告メッセージを要求できます。メッセージ配布確認(COD)報告メッセージと例外報告メッセージのオプションを選択した場合,メッセージの転送が失敗すると例外報告メッセージを受信できます。しかし,メッセージ配布確認(COD)報告メッセージのオプションだけを選択した場合には,メッセージの転送が失敗しても例外報告メッセージを受信できません。
該当するメッセージを生成するための選択基準が満たされるとき,要求した報告メッセージだけを受信できます。
(2) 報告メッセージオプション
報告メッセージを受信する場合には,ReplyToQフィールドに応答キューの名前を指定してください。指定しない場合,元のメッセージを発行するMQPUT命令とMQPUT1命令はMQRC_MISSING_REPLY_TO_Qで失敗します。
該当するメッセージに対して生成される報告メッセージのMsgIdおよびCorrelIdフィールドの内容を指定するために,メッセージ記述子(MQMD構造体)にその他の報告オプションを設定することもできます。
-
元のメッセージのMsgIdまたはCorrelIdフィールドを,報告メッセージのCorrelIdフィールドにコピーするように指定できます。デフォルトではMsgIdフィールドをコピーします。MQRO_COPY_MSG_ID_TO_CORRELIDを指定することをお勧めします。これによって,メッセージの送信側が,応答メッセージまたは報告メッセージを元のメッセージと関連づけることができます。応答メッセージまたは報告メッセージのCorrelIdフィールドは,元のメッセージのMsgIdフィールドと同じになります。
-
新規のMsgIdフィールドを報告メッセージのために生成するか,または元のメッセージのMsgIdフィールドを報告メッセージのMsgIdフィールドにコピーするか指定できます。デフォルトでは新規のMsgIdフィールドを生成します。MQRO_NEW_MSG_IDを指定することをお勧めします。これによって,システム内の各メッセージが異なるMsgIdフィールドを持つことになり,システム内の他メッセージと明確に区別できます。
-
特殊なアプリケーションではMQRO_PASS_MSG_ID,MQRO_PASS_CORREL_IDまたは両方を指定する必要があります。しかし,キューからメッセージを取り出すアプリケーションでは,正常に処理するために配慮が必要です。キューに同一のMsgIdフィールドで複数のメッセージが格納されている場合は特に必要です。
サーバアプリケーションは,問い合わせメッセージにあるこれらのフラグの設定を確認し,応答メッセージまたは応答メッセージのMsgIdおよびCorrelIdフィールドを適切に設定する必要があります。
問い合わせアプリケーションとサーバアプリケーションを中継するアプリケーションは,これらのフラグの設定を確認する必要はありません。通常は,サーバアプリケーションに転送する際に,MsgId,CorrelIdおよびReportフィールドを変更しないようにする必要があるからです。これによって,サーバアプリケーションは,元のメッセージのMsgIdフィールドを応答メッセージのCorrelIdフィールドにコピーできます。
メッセージについての報告を作成するときには,サーバアプリケーションでこれらのオプションが設定されているか確認するようにしてください。
報告の性質を示すために,キューマネジャは報告メッセージ返答コードを使用します。キューマネジャは報告メッセージ返答コードを報告メッセージのメッセージ記述子のFeedbackフィールドに設定します。また,MQIの理由コードをFeedbackフィールドに返すこともあります。TP1/Message Queueではアプリケーションで使用できる報告メッセージ返答コードを規定しています。
報告メッセージ返答コードを使用するアプリケーションの例としては,他アプリケーションがキューを処理する負荷を監視するアプリケーションがあります。一つのキューを処理している複数のアプリケーションがあるとします。キューにあるメッセージの数がそれだけの数のアプリケーションを必要としなくなると,報告メッセージ(FeedbackフィールドがMQFB_QUIT)をアプリケーションに送信して,動作を中止するよう指示できます。幾つのアプリケーションがキューを処理しているのか検出するために,監視アプリケーションはMQINQ命令を使用できます。