MQDLH構造体 - デッドレターヘッダ
MQDLH構造体は,次のフィールドから構成されます。
フィールド(データタイプ) | 内容 | 初期値 |
---|---|---|
StrucId(MQCHAR4型) | 構造体識別子 | MQDLH_STRUC_ID |
Version(MQLONG型) | 構造体バージョン番号 | MQDLH_VERSION_1 |
Reason(MQLONG型) | メッセージ通知理由 | MQRC_NONE |
DestQName(MQCHAR48型) | あて先キュー名 | ヌル文字列/空白 |
DestQMgrName(MQCHAR48型) | あて先キューマネジャ名 | ヌル文字列/空白 |
Encoding(MQLONG型) | MQDLH構造体に続くデータのマシンコード形式 | 0 |
CodedCharSetId(MQLONG型) | MQDLH構造体に続くデータの文字セット識別子 | MQCCSI_UNDEFINED |
Format(MQCHAR8型) | MQDLH構造体に続くデータのフォーマット名 | MQFMT_NONE |
PutApplType(MQLONG型) | 登録アプリケーションタイプ | 0 |
PutApplName(MQCHAR28型) | 登録アプリケーション名 | ヌル文字列/空白 |
PutDate(MQCHAR8型) | 登録日付 | ヌル文字列/空白 |
PutTime(MQCHAR8型) | 登録時刻 | ヌル文字列/空白 |
概要
目的
MQDLH構造体には,デッドレターキューに格納されるメッセージのアプリケーションデータの先頭に付けられる情報を記述します。デッドレターキューにメッセージが届くのは,次のどちらかの場合です。
セグメントであるメッセージが,MQDLH構造体を先頭に付けて登録される場合,キューマネジャは特別な処理をします。詳細については,この章の「MQMDE構造体 - メッセージ記述子の拡張」を参照してください。
フォーマット名
MQFMT_DEAD_LETTER_HEADER
文字セットおよびマシンコード
MQDLH構造体のフィールドは,MQDLH構造体の前にあるヘッダ構造体のCodedCharSetIdおよびEncodingフィールドの文字セットおよびマシンコードに従います。また,MQDLH構造体がアプリケーションメッセージデータの先頭にある場合,MQMD構造体のCodedCharSetIdおよびEncodingフィールドに従います。
文字セットは,キュー名に有効な1バイト文字セットにする必要があります。
使用方法
アプリケーションが直接デッドレターキューにメッセージを登録する場合,メッセージデータの先頭にMQDLH構造体を付ける必要があります。また,構造体の各フィールドを適切に初期化してください。MQDLH構造体を付けたかどうか,および各フィールドの値が正しいかどうかは,キューマネジャによってチェックされません。
デッドレターキューに登録するメッセージが長過ぎる場合,アプリケーションは次のどれかの処置をしてください。
上記のどの方法を採用するかは,アプリケーションの設計方法によって異なります。
セグメントであるメッセージがMQDLH構造体を先頭にして登録されたとき,キューマネジャは特別な処理をします。詳細については,この章の「MQMDE構造体 - メッセージ記述子の拡張」を参照してください。
デッドレターキューへのメッセージの登録
メッセージをデッドレターキューへ登録するとき,MQPUTまたはMQPUT1命令に使用するMQMD構造体は,そのメッセージに関連するMQMD構造体と同一にする必要があります(通常は,MQGET命令によって返されるMQMD構造体です)。ただし,次の例外があります。
MQDLH構造体中の各フィールドは,次のように設定してください。
アプリケーションは,各フィールドの値が適切かどうか,および文字フィールドの余りが空白で埋められているかどうかを確認する必要があります。MQDLH構造体中の文字データは,ヌル文字で終了できません。キューマネジャは,MQDLH構造体のヌル文字以降の文字を,空白に置き換えません。
デッドレターキューからのメッセージの取り出し
アプリケーションは,デッドレターキューから取り出したメッセージが,MQDLH構造体で始まっているかどうかを確認する必要があります。メッセージ記述子MQMD構造体のFormatフィールドを調べることで,それを確認できます。FormatフィールドがMQFMT_DEAD_LETTER_HEADERの場合,メッセージデータがMQDLH構造体で始まっていると判断できます。なお,メッセージを取り出すアプリケーションは,メッセージが長過ぎて後部が切り捨てられた場合があることに注意してください。
フィールド
構造体を構成するフィールドについて,アルファベット順に説明します。
● CodedCharSetId(MQLONG型) 文字セット識別子
MQDLH構造体に続くデータの文字セット識別子です。
MQDLH構造体に続くデータ(通常は,元のメッセージから取られたデータ)の文字セット識別子を指定します。MQDLH構造体自身の文字データには適用されません。
MQPUTまたはMQPUT1命令では,アプリケーションはデータに合った値をこのフィールドに設定する必要があります。
このフィールドの初期値はMQCCSI_UNDEFINEDです。
● DestQMgrName(MQCHAR48型) あて先キューマネジャ名
登録元メッセージのあて先であるキューマネジャの名称です。
このフィールドの長さは,MQ_Q_MGR_NAME_LENGTHに定義されています。
このフィールドの初期値は,C言語ではヌル文字列です。そのほかのプログラミング言語では,48個の空白です。
● DestQName(MQCHAR48型) あて先キュー名
登録元メッセージのあて先キューの名称です。
このフィールドの長さは,MQ_Q_NAME_LENGTHに定義されています。
このフィールドの初期値は,C言語ではヌル文字列です。そのほかのプログラミング言語では,48個の空白です。
● Encoding(MQLONG型) マシンコード形式
MQDLH構造体に続くデータのマシンコード形式です。
MQDLH構造体に続くデータ(通常は,元のメッセージから取られたデータ)のマシンコード形式を指定します。MQDLH構造体自身の数値データには適用されません。
MQPUTおよびMQPUT1命令では,アプリケーションはデータに合った値をこのフィールドに設定する必要があります。
このフィールドの初期値は0です。
● Format(MQCHAR8型) フォーマット名
MQDLH構造体に続くデータのフォーマット名です。
MQDLH構造体に続くデータ(通常は元のメッセージから取られたデータ)のフォーマット名を指定します。
MQPUTおよびMQPUT1命令では,アプリケーションはデータに合った値をこのフィールドに設定する必要があります。このフィールドの設定方法はMQMD構造体のFormatフィールドと同じです。
このフィールドの長さは,MQ_FORMAT_LENGTHに定義されています。
このフィールドの初期値はMQFMT_NONEです。
● PutApplName(MQCHAR28型) 登録アプリケーション名
メッセージをデッドレターキューに登録するアプリケーションの名称です。
名称の形式は,PutApplTypeフィールドの値に合わせます。この章の「MQMD構造体 - メッセージ記述子」でPutApplNameフィールドの説明を参照してください。
キューマネジャがデッドレターキューにメッセージを転送する場合,PutApplNameフィールドの値はキューマネジャ名の先頭から28文字までです。キューマネジャは,必要に応じて余りを空白で埋めます。
このフィールドの長さは,MQ_PUT_APPL_NAME_LENGTHに定義されています。
このフィールドの初期値は,C言語ではヌル文字列です。そのほかのプログラミング言語では,28個の空白です。
● PutApplType(MQLONG型) 登録アプリケーションタイプ
メッセージをデッドレターキューに登録するアプリケーションのタイプです。
このフィールドの意味は,メッセージ記述子MQMD構造体のPutApplTypeフィールドと同じです。
キューマネジャがデッドレターキューにメッセージを転送する場合,PutApplTypeフィールドの値はMQAT_QMGRです。
このフィールドの初期値は0です。
● PutDate(MQCHAR8型) 登録日付
メッセージがデッドレターキューに転送された日付です。
キューマネジャは次の形式を使用します。
PutDateフィールドとPutTimeフィールドには,グリニッジ標準時(GMT)を使用します。システムの時計を正しく設定してください。
このフィールドの長さは,MQ_PUT_DATE_LENGTHに定義されています。
このフィールドの初期値は,C言語ではヌル文字列です。そのほかのプログラミング言語では,8個の空白です。
● PutTime(MQCHAR8型) 登録時刻
メッセージがデッドレターキューに転送された時刻です。
キューマネジャは次の形式を使用します。
PutDateフィールドとPutTimeフィールドには,グリニッジ標準時(GMT)を使用します。システムの時計を正しく設定してください。
このフィールドの長さは,MQ_PUT_TIME_LENGTHに定義されています。
このフィールドの初期値は,C言語ではヌル文字列です。そのほかのプログラミング言語では,8個の空白です。
● Reason(MQLONG型) メッセージ通知理由
メッセージがデッドレターキューに届いた理由を示します。MQFB_*,またはMQRC_*のどれか(例:MQRC_Q_FULL)で示されます。
MQFB_*の中には,このフィールドでだけ使用されるものがあります。それらの値は,デッドレターキューへ転送されるトリガメッセージに関するものです。
このフィールドの初期値はMQRC_NONEです。
● StrucId(MQCHAR4型) 構造体識別子
次の値を取ります。
このフィールドの初期値はMQDLH_STRUC_IDです。
● Version(MQLONG型) 構造体バージョン番号
次の値を取ります。
次の値には現在のバージョン番号を指定します。
このフィールドの初期値はMQDLH_VERSION_1です。