Hitachi

OpenTP1 Version 7 OpenTP1 メッセージキューイング機能 TP1/Message Queue プログラム作成リファレンス


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個の空白です。

● 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です。