• 検索結果がありません。

MQTM_CURRENT_VERSION

ドキュメント内 TP1/Message Queue プログラム作成リファレンス (ページ 182-188)

現在のバージョンを指定したトリガメッセージの構造体バージョン番号 このフィールドの初期値は MQTM_VERSION_1 です。

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 埋め込みメッセージ記述子から複写

MQMD 構造体のフィールド 使用される値

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

ドキュメント内 TP1/Message Queue プログラム作成リファレンス (ページ 182-188)