MQXQH構造体 − 転送キューヘッダ
MQXQH構造体は,次のフィールドから構成されます。
フィールド(データタイプ) |
内容 |
初期値 |
---|---|---|
StrucId(MQCHAR4型) |
構造体識別子 |
MQXQH_STRUC_ID |
Version(MQLONG型) |
構造体バージョン番号 |
MQXQH_VERSION_1 |
RemoteQName(MQCHAR48型) |
リモートキュー名 |
ヌル文字列/空白 |
RemoteQMgrName(MQCHAR48型) |
リモートキューマネジャ名 |
ヌル文字列/空白 |
MsgDesc(MQMD構造体) |
登録元メッセージ記述子 |
該当しない |
概要
目的
MQXQH構造体は,転送キューにメッセージを格納するときに使用されます。そのメッセージの先頭には,この構造体が付けられます。転送キューは,リモートキューへ送信するときに,一時的にメッセージを格納する特別なローカルキューです。したがって,ローカルキューマネジャに属するキューへの転送には使用しません。転送キューは,Usage属性がMQUS_TRANSMISSIONのキューです。
フォーマット名
MQFMT_XMIT_Q_HEADER
文字セットおよびマシンコード
MQXQH構造体のデータは,ローカルキューマネジャの文字セットおよびマシンコードに従います。それぞれキューマネジャのCodedCharSetId属性およびMQENC_NATIVEで指定します。
MQXQH構造体の文字セットおよびマシンコードは,次に示す構造体中のCodedCharSetIdおよびEncodingフィールドに設定する必要があります。
-
分離MQMD構造体(MQXQH構造体がメッセージデータの先頭にある場合)
-
MQXQH構造体に先行するヘッダ構造体(その他のすべての場合)
使用方法
転送キューにあるメッセージには,次に示す二つのメッセージ記述子があります。
-
メッセージデータから分離して格納されるメッセージ記述子
これは分離メッセージ記述子と呼ばれます。メッセージが転送キューに登録されるときに,キューマネジャによって生成されます。分離メッセージ記述子のフィールドの幾つかは,アプリケーションがMQPUTまたはMQPUT1命令に指定するメッセージ記述子からコピーされます。詳細については,「分離メッセージ記述子のフィールド」を参照してください。
分離メッセージ記述子は,メッセージが転送キューから削除されたときに,MQGET命令のMsgDesc引数でアプリケーションに返されます。
-
MQXQH構造体にメッセージデータの一部として格納されているメッセージ記述子
これは埋め込みメッセージ記述子と呼ばれます。このメッセージ記述子は,アプリケーションがMQPUTまたはMQPUT1命令に指定するメッセージ記述子とほぼ同じコピーです。詳細については,「埋め込みメッセージ記述子のフィールド」を参照してください。
埋め込みメッセージ記述子は,常にバージョン1のMQMD構造体です。アプリケーションによって登録されたメッセージが,MQMD構造体のバージョン2フィールドで初期値ではない値を一つ以上持つ場合,MQMDE構造体がMQXQH構造体に続きます。その後,アプリケーションメッセージデータが存在する場合は,そのアプリケーションメッセージデータが続きます。このとき,MQMDE構造体は,次のどちらかです。
-
アプリケーションがメッセージを登録するためにバージョン2のMQMD構造体を使用したときに,キューマネジャによって生成されたMQMDE構造体
-
すでにアプリケーションメッセージデータの先頭に存在するMQMDE構造体
アプリケーションがメッセージを登録するためにバージョン1のMQMD構造体を使用すると,メッセージが最終のあて先キューから削除されたときに,埋め込みメッセージ記述子はMQGET命令のMsgDesc引数でアプリケーションに返されます。
-
分離メッセージ記述子のフィールド
分離メッセージ記述子は,キューマネジャによって次のように設定されます。キューマネジャがバージョン2をサポートしていない場合は,バージョン1のMQMD構造体フィールドがすべて使用されます。
MQMD構造体のフィールド |
使用される値 |
---|---|
StrucId |
MQMD_STRUC_ID |
Version |
MQMD_VERSION_2 |
Report |
埋め込みメッセージ記述子から複写されますが,MQRO_ACCEPT_UNSUP_IF_XMIT_MASKで識別されるビットが0に設定されます。これによって,メッセージが転送キューに到着したとき,または転送キューから取り出されたとき,COAまたはCOD報告が生成されません。 |
MsgType |
埋め込みメッセージ記述子から複写 |
Expiry |
埋め込みメッセージ記述子から複写 |
Feedback |
埋め込みメッセージ記述子から複写 |
Encoding |
MQENC_NATIVE |
CodedCharSetId |
キューマネジャのCodedCharSetId |
Format |
MQFMT_XMIT_Q_HEADER |
Priority |
埋め込みメッセージ記述子から複写 |
Persistence |
埋め込みメッセージ記述子から複写 |
MsgId |
キューマネジャによって生成される新しい値が使用されます。このメッセージ記述子は,キューマネジャが埋め込みメッセージ記述子に生成するMsgIdフィールドとは異なります。 |
CorrelId |
埋め込みメッセージ記述子のCorrelIdフィールド |
BackoutCount |
0 |
ReplyToQ |
埋め込みメッセージ記述子から複写 |
ReplyToQMgr |
埋め込みメッセージ記述子から複写 |
UserIdentifier |
埋め込みメッセージ記述子から複写 |
AccountingToken |
埋め込みメッセージ記述子から複写 |
ApplIdentityData |
埋め込みメッセージ記述子から複写 |
PutApplType |
MQAT_QMGR |
PutApplName |
キューマネジャ名称の先頭28バイト |
PutDate |
メッセージが転送キューに登録された日 |
PutTime |
メッセージが転送キューに登録された時間 |
ApplOriginData |
空白 |
GroupId |
MQGI_NONE |
MsgSeqNumber |
1 |
Offset |
0 |
MsgFlags |
MQMF_NONE |
OriginalLength |
MQOL_UNDEFINED |
埋め込みメッセージ記述子のフィールド
埋め込みメッセージ記述子のフィールドは,次に示す場合を除いて,MQPUT命令またはMQPUT1命令のMsgDesc引数と同じ値です。
-
Versionフィールドは,常にMQMD_VERSION_1の値となります。
PriorityフィールドがMQPRI_PRIORITY_AS_Q_DEFの場合,キューのDefPriority属性の値に変換されます。PersistenceフィールドがMQPER_PERSISTENCE_AS_Q_DEFの場合,キューのDefPersistence属性の値に変換されます。
-
MsgIdフィールドは,次に示す場合,キューマネジャによって生成された新しいメッセージ識別子に変換されます。
-
MsgIdフィールドがMQMI_NONEの場合
-
MQPMO_NEW_MSG_IDオプションが指定された場合
-
メッセージが配布リストメッセージの場合
配布リストメッセージが,異なる転送キューに登録するために分割されることがあります。そのとき,新しい埋め込みメッセージ記述子のそれぞれのMsgIdフィールドは,元の配布リストメッセージと同じです。
-
-
MQPMO_NEW_CORREL_IDオプションが指定されると,CorrelIdフィールドは,キューマネジャによって生成された新しい相関識別子に変換されます。
コンテキストフィールドは,PutMsgOpts引数で指定されたMQPMO_*_CONTEXTオプションによって設定されます。コンテキストフィールドとは,次に示すフィールドのことです。
-
UserIdentifier
-
AccountingToken
-
ApplIdentityData
-
PutApplType
-
PutApplName
-
PutDate
-
PutTime
-
ApplOriginData
-
バージョン2のフィールドがある場合は,MQMD構造体から削除され,MQMDE構造体に移動されます。これは,バージョン2フィールドの一つ以上の値が初期値以外の場合です。
リモートキューへのメッセージの登録
アプリケーションが,リモートキューに直接指定してメッセージを登録する場合,またはリモートキューのローカル定義を使用してメッセージを登録する場合,ローカルキューマネジャは,次の処理をします。
-
埋め込みメッセージ記述子を含むMQXQH構造体の生成
-
MQMDE構造体が必要であるが,存在しない場合は,MQMDE構造体の付加
-
アプリケーションメッセージデータの付加
-
メッセージの適切な転送キューへの登録
転送キューに直接メッセージを登録する方法
アプリケーションは,転送キューに直接メッセージを登録することもできます。この場合,アプリケーションはMQXQH構造体をアプリケーションメッセージデータの前に設定し,フィールドを適切な値で初期化しなければなりません。また,アプリケーションが,MQPUT命令またはMQPUT1命令で指定したメッセージ記述子のMQMD構造体のFormatフィールドに,MQFMT_XMIT_Q_HEADERを設定しなければなりません。
アプリケーションによって作成されたMQXQH構造体の文字データは,MQPUT命令またはMQPUT1命令で指定されたMsgDesc引数のCodedCharSetIdフィールドで定義された文字集合に含まれなければなりません。整数データも,そのメッセージ記述子のEncodingフィールドで定義されたマシンコード変換形式に含まれなければなりません。また,MQXQH構造体の文字データは,定義されたフィールドの長さまで空白で埋められなければなりません。キューマネジャは,MQXQH構造体の中のヌル文字とそれに続く文字を空白に変換しません。したがって,データ文字列の終わりにヌル文字を使用してなりません。
キューマネジャはMQXQH構造体が存在するかどうか,およびフィールドに有効な値が指定されているかどうかをチェックしません。注意してください。
転送キューからメッセージを取り出す方法
転送キューからメッセージを取り出すアプリケーションは,MQXQH構造体の情報を適切な方法で処理しなければなりません。アプリケーションメッセージデータの始めにMQXQH構造体が存在するかどうかは,MQGET命令のMsgDesc引数のFormatフィールドに返される値であるMQFMT_XMIT_Q_HEADERで示されます。
MsgDesc引数のCodedCharSetIdフィールドおよびEncodingフィールドに返される値は,それぞれMQXQH構造体の文字データの文字集合と,整数データのコード変換形式を示します。アプリケーションメッセージデータの文字集合とコード変換形式は,埋め込みメッセージ記述子のCodedCharSetIdフィールドとEncodingフィールドで定義されます。
フィールド
構造体を構成するフィールドについて,アルファベット順に説明します。
● MsgDesc(MQMD構造体) 登録元メッセージ記述子
アプリケーションがメッセージをリモートキューへ送信したときのMQPUT命令またはMQPUT1命令で,MsgDesc引数に指定されたメッセージ記述子MQMD構造体の複写です。
- 注意事項
-
これはバージョン1のMQMD構造体です。
この構造体の各フィールドの初期値は,MQMD構造体の各フィールドの初期値と同じです。
● RemoteQMgrName(MQCHAR48型) リモートキューマネジャ名
メッセージの表面上の最終あて先であるキューを保持するキューマネジャの名前です。
メッセージが配布リストメッセージの場合,RemoteQMgrNameフィールドは空白となります。
このフィールドの長さは,MQ_Q_MGR_NAME_LENGTHに定義されています。
このフィールドの初期値は,C言語ではヌル文字列です。そのほかのプログラミング言語では,48個の空白です。
● RemoteQName(MQCHAR48型) リモートキュー名
メッセージの表面上のあて先キューの名称です。これは,キューの実名と異なる場合があります。例えば,ほかのリモートキューのローカル定義として,RemoteQMgrNameのリモートキューマネジャに定義された場合などです。
メッセージが配布リストメッセージのとき,つまり,MQMD構造体のFormatフィールドがMQFMT_DIST_HEADERであるとき,RemoteQNameフィールドは空白です。
このフィールドの長さは,MQ_Q_NAME_LENGTHに定義されています。
このフィールドの初期値は,C言語ではヌル文字列です。そのほかのプログラミング言語では,48個の空白です。