Hitachi

OpenTP1 Version 7 OpenTP1 メッセージキューイング機能 TP1/Message Queue プログラム作成の手引


5.4.2 デッドレターキューの使用

キューマネジャがメッセージを転送できないとき,キューマネジャはデッドレターキューにメッセージを登録します。このキューはキューマネジャの開始時に定義してください。

キューマネジャと同様にアプリケーションからデッドレターキューを使用できます。キューマネジャオブジェクトをMQOPEN命令でオープンし,DeadLetterQName属性をMQINQ命令で照会することによって,デッドレターキューの名前を調べることができます。

キューマネジャがメッセージをこのキューに登録するとき,メッセージにヘッダを追加します。その形式はMQDLH構造体(デッドレターヘッダ)で定義されます。MQDLH構造体については,マニュアル「TP1/Message Queue プログラム作成リファレンス」を参照してください。このヘッダにはあて先キューの名前やメッセージがデッドレターキューに登録された理由が記載されます。目的のキューにメッセージを登録する前には,問題を解決してヘッダを削除してください。MQDLH構造体が含まれることを示すために,キューマネジャはメッセージ記述子のFormatフィールドを変更します。

MQDLH構造体

デッドレターキューにメッセージを登録するときには,すべてのメッセージにMQDLH構造体を追加することをお勧めします。

ヘッダをメッセージに追加することによって,デッドレターキューへ登録するにはメッセージが長過ぎてしまうことがあります。したがって,少なくともMQ_MSG_HEADER_LENGTHの値の分だけは,デッドレターキューに登録可能なメッセージ長よりもメッセージが短くなるように注意してください。キューに登録可能なメッセージの最大長は,キューのMaxMsgLength属性の値によって決定されます。デッドレターキューについては,この属性がキューマネジャの許容する最大長になるようにしてください。アプリケーションがメッセージを転送できない場合で,メッセージがデッドレターキューへの登録には長過ぎるときには,MQDLH構造体の解説に従って処理してください。

デッドレターキューを監視して,到着したメッセージが処理されるように独自のアプリケーションを用意してください。アプリケーションはトリガで動作させたり,一定間隔で動作させたりします。

データ変換が必要な場合には,MQGET命令にMQGMO_CONVERTオプションを使用するときに,キューマネジャがヘッダ情報を変換します。メッセージを登録するプロセスがMCAの場合には,ヘッダのあとに登録元メッセージのすべてのテキストが続きます。

ただし,TP1/Message Queueでは,MCAからデッドレターキューに登録するメッセージが長過ぎる場合,MQRC_MSG_TOO_BIG_FOR_Qで失敗します。

〈この項の構成〉

(1) デッドレターキューの処理

デッドレターキューの処理はローカルシステムの要件によって異なります。計画時には次に示す項目を参考にして検討してください。

デッドレターキューアプリケーションでは,次に示す項目を一つ以上実行してください。

デッドレターキューから回復したメッセージを処理する方法は二つあります。