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フィールドに設定する必要があります。

使用方法

転送キューにあるメッセージには,次に示す二つのメッセージ記述子があります。

分離メッセージ記述子のフィールド

分離メッセージ記述子は,キューマネジャによって次のように設定されます。キューマネジャがバージョン2をサポートしていない場合は,バージョン1のMQMD構造体フィールドがすべて使用されます。

MQMD構造体のフィールド使用される値
StrucIdMQMD_STRUC_ID
VersionMQMD_VERSION_2
Report埋め込みメッセージ記述子から複写されますが,MQRO_ACCEPT_UNSUP_IF_XMIT_MASKで識別されるビットが0に設定されます。これによって,メッセージが転送キューに到着したとき,または転送キューから取り出されたとき,COAまたはCOD報告が生成されません。
MsgType埋め込みメッセージ記述子から複写
Expiry埋め込みメッセージ記述子から複写
Feedback埋め込みメッセージ記述子から複写
EncodingMQENC_NATIVE
CodedCharSetIdキューマネジャのCodedCharSetId
FormatMQFMT_XMIT_Q_HEADER
Priority埋め込みメッセージ記述子から複写
Persistence埋め込みメッセージ記述子から複写
MsgIdキューマネジャによって生成される新しい値が使用されます。このメッセージ記述子は,キューマネジャが埋め込みメッセージ記述子に生成するMsgIdフィールドとは異なります。
CorrelId埋め込みメッセージ記述子のCorrelIdフィールド
BackoutCount0
ReplyToQ埋め込みメッセージ記述子から複写
ReplyToQMgr埋め込みメッセージ記述子から複写
UserIdentifier埋め込みメッセージ記述子から複写
AccountingToken埋め込みメッセージ記述子から複写
ApplIdentityData埋め込みメッセージ記述子から複写
PutApplTypeMQAT_QMGR
PutApplNameキューマネジャ名称の先頭28バイト
PutDateメッセージが転送キューに登録された日
PutTimeメッセージが転送キューに登録された時間
ApplOriginData空白
GroupIdMQGI_NONE
MsgSeqNumber1
Offset0
MsgFlagsMQMF_NONE
OriginalLengthMQOL_UNDEFINED

埋め込みメッセージ記述子のフィールド

埋め込みメッセージ記述子のフィールドは,次に示す場合を除いて,MQPUT命令またはMQPUT1命令のMsgDesc引数と同じ値です。

バージョン2のフィールドがある場合は,MQMD構造体から削除され,MQMDE構造体に移動されます。これは,バージョン2フィールドの一つ以上の値が初期値以外の場合です。

リモートキューへのメッセージの登録

アプリケーションが,リモートキューに直接指定してメッセージを登録する場合,またはリモートキューのローカル定義を使用してメッセージを登録する場合,ローカルキューマネジャは,次の処理をします。

転送キューに直接メッセージを登録する方法

アプリケーションは,転送キューに直接メッセージを登録することもできます。この場合,アプリケーションは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個の空白です。

● StrucId(MQCHAR4型) 構造体識別子

次の値を取ります。

MQXQH_STRUC_ID
転送キューヘッダの構造体識別子
C言語では,MQXQH_STRUC_ID_ARRAYも定義されています。これは,MQXQH_STRUC_IDと同じ値です。ただし,文字列ではなく文字の配列として定義されています。

このフィールドの初期値はMQXQH_STRUC_IDです。

● Version(MQLONG型) 構造体バージョン番号

次の値を取ります。

MQXQH_VERSION_1
転送キューヘッダの構造体バージョン番号

次の定数には,現在のバージョンのバージョン番号を指定します。

MQXQH_CURRENT_VERSION
現在のバージョンの転送キューヘッダの構造体バージョン番号

このフィールドの初期値はMQXQH_VERSION_1です。