WebSphere MQ: Dead-letter キューへの保管 – DEADQ

前回までの記事の続き。WebSphere MQのDead-letterキューのハンドリングの機能を確認する。参考文献は記事末尾をご参照。

Dead-letterキューとは

以下に適当な記述があった為、引用させて頂く。
引用元:WebSphere MQ System Administration Guide Version 7.0

Dead-letter queues
A dead-letter (undelivered-message) queue is a queue that stores messages that cannot be routed to their correct destinations. This occurs when, for example, the destination queue is full. The supplied dead-letter queue is called SYSTEM.DEAD.LETTER.QUEUE. For distributed queuing, define a dead-letter queue on each queue manager involved.

指定の宛先にメッセージを保管できない場合に保管するキューでキュー・マネージャー上で定義される。例として宛先がキューフルの場合などにdead-letterキューに保管される。尚、仮にDead-letterキューにputできないと、チャネルは停止し、メッセージがトランスミッション・キューに残る。

Dead-letterキューの定義

前の記事(分散キューイング)のところでDLQというDead-letterキューは既に定義している。

Dead-letterキューの動作確認

キュー・マネージャーQMW上のQL.AのputをDISABLEDにする事でQL.Aにputできない状態を作り、QMCよりメッセージを伝送することで、QMW上でメッセージがDead-letterキューに保管されることを確認する。
事前準備として、QMW上で下記のコマンドをmqscインターフェース上で実行。

続いて、QMCよりリモート・キュー定義(QMWのQL.Aを参照している)に対してamqsputでメッセージをputする。

しかし、QMW上のQL.AはPUTできない為、QL.Aにはメッセージが到達せず、dead-letterキューにメッセージが格納されている。

amqsbcgを用いて、Dead-letterヘッダーを確認する。

4バイトのReasonコード(headerの9〜12バイト)を確認すると0308 0000と分かるが、検証環境はMac(Intel製CPU)の為リトルエンディアンを正しく解釈するとコードは00000803となる。

参考文献