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

報告を要求しません。

MQRO_NONE は,ほかのオプションが指定されていないことを示すのに使用できます。なお,

MQRO_NONE はプログラムの文書管理のために定義されています。ほかのオプションと一緒に指定 しないでください。MQRO_NONE の値は 0 なので,これ以外の用途では使用できません。

Report フィールド全般について:

1. 指定した種類の報告だけが生成されることに注意してください。例えば,到着確認報告は必要であ るが例外報告は必要ない場合,メッセージがあて先キューに格納されると到着確認報告が生成され ます。しかし,メッセージが到着したときにあて先キューが満杯であっても,例外報告は生成され ません。報告オプションを一つも指定しなかった場合,キューマネジャによっても MCA によって も,報告は生成されません。

報告オプションの中には,ローカルキューマネジャが認識していなくても指定できるものがありま す。それは,そのオプションがあて先のキューマネジャで処理される場合です。詳細は,「付録 D 

報告オプションとメッセージフラグ」を参照してください。

報告メッセージを要求する場合,報告先のキュー名を ReplyToQ フィールドに指定する必要があり ます。

2. 障害などで応答キューへ通知できない場合,報告メッセージはデッドレターキューへ転送されます。

この転送も失敗した場合,またはデッドレターキューがなかった場合は,報告メッセージのタイプ によって次のようになります。

・報告メッセージが例外報告の場合,例外報告を生成させたメッセージは転送キューに残っていま す。その場合,メッセージが消失しないことが保証されます。

・そのほかのタイプの報告メッセージは破棄され,通常どおりに処理が続行されます。これは,到 着確認報告メッセージまたは配布確認報告メッセージがすでに配布されたことを示しています。ま たは,保持時間終了報告は関係なくなったことを示しています。

報告メッセージがいったんキュー(通常は転送キュー)に格納されると,ほかの種類のメッセージ と同様に扱われます。このため,登録元メッセージが永続メッセージだった場合,報告は永続メッ セージとなり破棄されることはありません。

3. 報告が生成されるとき,登録元メッセージの UserIdentifier のユーザ識別子で ReplyToQ のキュー が登録用にオープンされます。ただし,次の場合は除きます。

・MCA が例外報告を生成するとき,登録元メッセージが登録されたときのユーザ識別子が使用さ れます。

・キューマネジャが到着確認報告を生成するとき,登録元メッセージが登録されたときのユーザ識 別子が使用されます。

報告を生成するアプリケーションは,通常,応答を生成するときと同様のユーザ識別子を使用しま す。つまり,登録元メッセージのユーザ識別子を使用します。

報告先がリモートキューの場合,ほかのメッセージのときと同様に,報告が必要かどうかを送信側 と受信側で選択できます。

4. 報告をデータ付きで要求している場合,次のようになります。

・報告データは,後部を切り捨てられることはありません。応答キューに対して報告メッセージが 長過ぎた場合,デッドレターキューへ転送されます。デッドレターキューに対しても長過ぎた場合,

報告メッセージは破棄されます。

・登録元データの Format フィールドが MQFMT_XMIT_Q_HEADER の場合,報告メッセージの 100 バイトのデータには,MQXQH 構造体は含まれません。登録元メッセージの MQXQH 構造体 の後ろからの部分が,報告メッセージのデータになります。転送キューの場合も転送キュー以外の 場合も同様です。

5. 到着確認報告,配布確認報告,または保持時間終了報告を応答キューに受信すると,登録元メッセー ジが到着したこと,配布されたこと,または保持時間が終了したことが保証されます。報告を要求 しても,それらを受信しなかった場合,要因として次の現象が考えられます。

a. 接続が切断されたため,報告が止まっています。

b. 仲介する転送キューまたは応答キューに,満杯,登録禁止などのブロック状態があるため,報 告が止まっています。

c. 報告がデッドレターキューに転送されました。

d. キューマネジャが報告を生成しようとしたときに,対応するキューにも,デッドレターキュー にも登録できなかったため,報告を生成できませんでした。

e. メッセージの該当する到着,配布,または保持時間終了の状態から報告を生成するまでに,

キューマネジャの障害が発生しました。ただし,次の配布確認報告のときは例外です。トランザク ション内から登録元メッセージを取り出した場合,同じトランザクションの処理として配布確認報 告が生成されるので,該当しません。

例外報告が届かなかった場合,上記の a.,b.,c.の場合が該当します。MCA が要求された例外報告 を生成できなかった場合,つまり,応答キューとデッドレターキューのどちらにも登録できなかっ た場合は,登録元メッセージは送信側の転送キューに残り,回線はクローズされます。これは,例 外報告が送信側で生成された場合も,回線の受信側で生成された場合も同様です。

6. 登録元メッセージが一時的にブロックされた場合は,例外報告が生成され,登録元メッセージはデッ ドレターキューへ転送されます。ブロック状態が解消されたあとに,アプリケーションがデッドレ ターキューから登録元メッセージを取り出し,再びあて先キューに登録したとします。この場合,

次のように処理されます。

・例外報告が生成されても,実際にはメッセージがあて先キューに到着します。

・メッセージが別のブロックにぶつかると,一つの登録元メッセージに対して複数の例外報告が生 成されます。

セグメント分割ができるメッセージへの報告メッセージ:

1. セグメントの分割ができるメッセージに,報告メッセージを要求できます。詳細は,「MsgFlags フィールド」の MQMF_SEGMENTATION_ALLOWED フラグの説明を参照してください。

キューマネジャがメッセージのセグメント分割が必要であると判断した場合,適切な条件に合致す る各セグメントに対して,報告メッセージが生成されます。したがって,アプリケーションは,要 求した報告メッセージのそれぞれのタイプについて,複数の報告メッセージを受信できるようにし なければなりません。報告メッセージの GroupId フィールドは,元のメッセージのグループ識別子 となるので,複数の報告を関連づけできます。Feedback フィールドは,それぞれの報告メッセー ジのタイプを識別するのに使用できます。

2. セグメントの報告メッセージを取り出す場合に,MQGMO_LOGICAL_ORDER を使用するとき,

異なるタイプの報告が MQGET 命令で返却されることに注意してください。例えば,COA と COD

の両方の報告が,キューマネジャによってセグメント分割されたメッセージに要求されていた場合,

報告メッセージに対する MQGET 命令では,COA と COD の報告が不定の形式で挿入されること があります。これは,MQGMO_COMPLETE_MSG オプションを使用すると避けられます。この とき,任意で MQGMO_ACCEPT_TRUNCATED_MSG オプションも使用できます。

MQGMO_COMPLETE_MSG を指定すると,キューマネジャは同じタイプの報告メッセージを組 み立てます。例えば,最初の MQGET 命令では元のメッセージに関連するすべての COA メッセー ジを組み立て,2 番目の MQGET 命令ではすべての COD メッセージを組み立てることができま す。なお,キューで最初に現れる報告メッセージが,最初に組み立てられます。

3. 自分自身でセグメントを登録するアプリケーションは,各セグメントに異なる報告オプションを指 定できます。ただし,次の点に注意してください。

・セグメントが MQGMO_COMPLETE_MSG オプションで取り出されると,先頭のセグメントの 報告オプションだけが,キューマネジャに認識されます。

・セグメントが一つ一つ取り出され,そのすべてに COD 報告オプションが設定されていない場合,

1 回の MQGET 命令で報告メッセージを取り出すために MQGMO_COMPLETE_MSG オプショ ンを使用したり,全報告メッセージが到着したのを確認するために

MQGMO_ALL_SEGMENTS_AVAILABLE オプションを使用したりすることはできません。

4. TP1/Message Queue のネットワークでは,キューマネジャはさまざまな機能を持っています。セ グメント分割をサポートしていないキューマネジャや MCA によってセグメントに対する報告メッ セージが生成されると,そのキューマネジャや MCA は報告メッセージに必要なセグメント情報を 提供しないので,生成される報告メッセージの元となるメッセージを識別することが困難となりま す。これは,MQRO_*_WITH_DATA または MQRO_*_WITH_FULL_DATA オプションを指定 し,報告メッセージにデータを要求することで解決できます。ただし,MQRO_*_WITH_DATA を指定すると,セグメント分割をサポートしていないキューマネジャまたは MCA によって,報告 メッセージが生成されます。その場合,100 バイト以下のアプリケーションデータが,報告メッセー ジを取り出すアプリケーションに返されることに注意してください。

報告メッセージのメッセージ記述子:

報告メッセージを取り出したとき,メッセージ記述子の Feedback フィールドで報告の種類を判断で きます。

キューマネジャまたは MCA によって報告が生成されるとき,報告メッセージのメッセージ記述子に は,次の値が設定されます。

MQMD 構造体のフィールド 値

StrucId MQMD_STRUC_ID

Version MQMD_VERSION_2

Report MQRO_NONE

MsgType MQMT_REPORT

Expiry MQEI_UNLIMITED

Feedback 報告の種類に応じて

(MQFB_COA,MQFB_COD,MQFB_EXPIRATION,または MQRC_*)

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