![[z/OS]](ngzos.gif)
z/OS 上の AMS の未配信メッセージ
IBM® MQ for z/OS®でのサーバー間メッセージ・チャネル・エージェント・インターセプトに関連する特定のシナリオ。
IBM MQ for z/OSで、サーバー間メッセージ・チャネル・エージェント (MCA) インターセプトが使用中の場合:
- 送信側 MCA がメッセージを受け取り無保護にした後に、チャネルに対してメッセージが大きすぎるなどの理由でメッセージを送信できなかった場合、USEDLQ 送信側チャネル属性が YES に設定されていると、送信側 MCA はそのメッセージをローカル送達不能キュー (DLQ) に移動します。SYSTEM.DEAD.LETTER.QUEUE をローカル DLQ として使用していると、そのメッセージは無保護状態になります。注: IBM MQ AMS は、システム・キューに書き込まれるメッセージの保護をサポートしていません。
指定された DLQ がローカル DLQ として使用されている場合、指定された DLQ と同じ名前の IBM MQ AMS ポリシーを定義していればメッセージは保護され、適切なポリシーを定義していなければ無保護になります。
- 何らかの理由でメッセージをローカル DLQ に書き込めない場合、チャネルの NPMSPEED が NORMAL に設定されているか、メッセージが持続メッセージであると、メッセージの現行バッチはバックアウトされ、チャネルは RETRY 状態になります。 そうでなければ、そのメッセージは破棄され、送信側 MCA が伝送キューにある次のメッセージの処理に進みます。
- セキュリティポリシーがSYSTEM.DEAD.LETTER.QUEUE、AMSのシステムキューの保護にリストされている他のSYSTEMキューに影響を与えないことを考えると、SYSTEM.DEAD.LETTER.QUEUEが使用中の場合、MCAによってこのキューに入れられたメッセージはそのまま配置されます。 つまり、保護状態だったメッセージは保護状態のままになり、そうでないメッセージは無保護状態のままになります。
キュー・マネージャーの DEADQ 属性が代替 (非システム) 送達不能キューの名前に設定されていて、同じ名前の AMS ポリシーが存在しない場合、MCA によってこのキューに書き込まれるメッセージはそのままになります。 つまり、保護状態だったメッセージは保護状態のままになり、そうでないメッセージは無保護状態のままになります。
キュー・マネージャーの DEADQ 属性が代替 (非システム) 送達不能キューの名前に設定されていて、DLQ と同じ名前の AMS ポリシーが存在する場合、MCA によってこのキューに書き込まれるメッセージを保護するためにこのポリシーが使用されます。 メッセージがすでに保護されていれば、再び保護されることはありません。保護の重複を避けるためです。 同じ名前の AMS ポリシーが存在しなければ、メッセージは現状のままの状態になります。
- setmqspl コマンドの許容オプションがオフ (つまり「-t O」) に設定された DLQ のポリシーがある場合、メッセージが AMS 保護されていないために PDMQ ヘッダーがないと、DLQ への書き込みは失敗します。 そのようになるのは、メッセージが PDMQ ヘッダーなしで受信側に届いた場合です。 つまり、メッセージの書き込み元に宛先のポリシーがなく、受信側で SPLPROT(ASPOLICY) が設定されていない場合です。
- DLQ 用に定義された AMS ポリシーが、メッセージを保護するためにチャネル・イニシエーターを実行しているユーザー ID を許可しない場合、MCA は DLQ へのメッセージの書き込みに失敗する可能性があります。
- 受信側チャネルは通常、未配布メッセージをローカル DLQ に書き込みます。一方、送信側チャネルは通常、キューに対してメッセージが大きすぎる、無効な MQXQH ヘッダーになっている、といった理由で処理できないメッセージをローカル DLQ に書き込みます。
- DLQ ハンドラーは通常、DLQ ヘッダー (DLH) だけを確認し、メッセージ・ペイロード自体は確認しません。 したがって、メッセージ・ペイロードが保護されていたとしても、メッセージが DLQ に書き込まれた理由をハンドラーが判別することの障害にはなりません。
- DLQ が定義されていない場合、チャネルは以下のようにします。
- 持続メッセージを送達できない場合は、異常終了します (再試行状態になります)。
- 非持続未配布メッセージは破棄して、実行処理を続けます。