[z/OS]

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 が定義されていない場合、チャネルは以下のようにします。
    • 持続メッセージを送達できない場合は、異常終了します (再試行状態になります)。
    • 非持続未配布メッセージは破棄して、実行処理を続けます。