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

計算機固有のマシンコード形式

このマシンコード形式は,アプリケーションを実行するプログラミング言語と計算機に固有の値です。

注意事項

この定数の値は,プログラミング言語と環境に依存します。このため,アプリケーションは,

実行する環境に合った COPY ファイルと INCLUDE ファイルを使用してコンパイルする必要 があります。

メッセージを登録するアプリケーションは,通常,MQENC_NATIVE を指定します。メッセージを取り 出すアプリケーションは,このフィールドが MQENC_NATIVE と等しいかどうかを比較します。等しく ない場合は,アプリケーションはメッセージ中の数値データを変換する必要があります。MQGET 命令の

処理でキューマネジャがメッセージを変換するように指定するには,MQGMO_CONVERT オプション を使用できます。Encoding フィールドの指定方法については,「付録 C マシンコード形式」を参照して ください。

MQGMO_CONVERT オプションが MQGET 命令で指定される場合,このフィールドは入出力用フィー ルドです。アプリケーションで指定された値は,メッセージデータの必要に応じて変換されるマシンコー ド形式です。変換が成功した場合,または変換が不要な場合,値は変更されません。変換が成功しなかっ た場合,MQGET 命令後の値はアプリケーションに設定される未変換メッセージのマシンコード形式を表 します。

MQGMO_CONVERT オプションが MQGET 命令で指定されない場合,このフィールドは,MQGET 命令の出力用フィールドです。また,MQPUT 命令と MQPUT1 命令の入力用フィールドです。

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

● Expiry(MQLONG 型) メッセージ保持時間

メッセージを登録するアプリケーションが指定する,1/10 秒単位の時間です。この時間が経過する前に メッセージがあて先キューから取り出されないと,このメッセージは破棄できる状態になります。

あて先キューで時間が経過するごとに,この時間が減少します。リモートキューに登録した場合は,仲介 するすべての転送キューで時間が減少します。また,転送時間が大きく影響する場合,MCA がこの時間 を減少させます。必要に応じて,メッセージを次のキューへ進めるアプリケーションで同様に時間を減少 させてください。ただし,メッセージ保持時間は概算で扱われるため,少しの時間では減少しません。

アプリケーションが MQGET 命令でメッセージを取り出したとき,Expiry フィールドにはメッセージ保 持時間の残りが示されます。

メッセージ保持時間が経過すると,キューマネジャによって破棄できる状態になります。破棄できる状態 のメッセージは,検索 MQGET 命令や非検索 MQGET 命令が実行されると破棄されます。また,保持時 間を経過したメッセージは,実行された命令が検索 MQGET 命令と非検索 MQGET 命令のどちらの場合 も,返されません。例えば,MQGMO 構造体の MatchOptions フィールドの設定値が MQMO_NONE の非検索 MQGET 命令で,FIFO 方式のキューから読み取りを実行するとします。この場合,終了してい ないメッセージが最初に出現するまでの,終了しているメッセージはすべて破棄されます。一方,優先順 位方式のキューから同様の読み取りを実行した場合,終了していない最初のメッセージより先にキューに 到着したメッセージのうち,優先順位が高いメッセージと優先順位が等しいメッセージが破棄されます。

したがって,MQGET 命令が成功した場合の Expiry フィールドの値は,0 以上の数値または MQEI_UNLIMITED です。

メッセージをリモートキューへ登録した場合,メッセージがあて先キューに到着する前に転送キューに格 納されている状態で保持時間が終了することがあります。その後,そのメッセージは破棄されます。

メッセージの報告オプションで MQRO_EXPIRATION を指定した場合,保持時間終了でメッセージが破 棄されたときに報告が生成されます。これらのオプションを指定しなかった場合,報告は生成されません。

通常,代わりのメッセージが送られるため,保持時間が経過したあとは,そのメッセージは無関連のもの とみなされます。

保持時間終了でメッセージを破棄するプログラムは,報告が要求されている場合,報告メッセージを通知 する必要があります。

注意事項

1. TP1/Message Queue では時間の減少を 1/10 秒単位の精度で実行しています。このフィール ドに 1〜9 の値を指定した場合,0 秒として扱います。このため,10 未満の値を指定した場合,

または相手システムから受信したメッセージ保持時間が 10 未満の値である場合,保持時間が経 過したメッセージとして扱われます。

2. 保持時間に 0 を指定して登録した場合,MQPUT 命令または MQPUT1 命令は理由コード MQRC_EXPIRY_ERROR で失敗します。この場合,報告メッセージは生成されません。

3. 保持時間が終了したメッセージはあとになるまで破棄されないため,それらのメッセージが取 り出せない状態でキューに残ります。これらも,キューのメッセージ登録数として数えられま す。この数え方は,トリガを起動する際のメッセージ登録数などのすべての場合に適用されます。

4. 例外報告を要求している場合,保持時間が終了したときではなく,メッセージが実際に破棄さ れたときに例外報告が生成されます。

5. 保持時間が終了したメッセージの破棄および例外報告の生成は,トランザクションの処理には 含まれません。トランザクション内の MQGET 命令の結果でメッセージが破棄された場合でも 含まれません。

6. トランザクション内の MQGET 命令で保持時間終了の際のメッセージを取り出したあとにトラ ンザクションがロールバックした場合,再びメッセージを取り出す前に保持時間が終了するこ とがあります。

7. 同様に,MQGMO_LOCK オプションを指定した MQGET 命令で保持時間終了間際のメッセー ジを排他状態にした場合,MQGMO_MSG_UNDER_CURSOR オプションを指定した

MQGET 命令でメッセージを取り出す前に保持時間が終了することがあります。このとき,理 由コード MQRC_NO_MSG_UNDER_CURSOR が MQGET 命令で返されます。

8. メッセージ保持時間がゼロよりも大きい問い合わせメッセージを取り出す場合,アプリケーショ ンは応答メッセージを送信するときに次に示すどれかの処理を実行できます。

・残りの保持時間を問い合わせメッセージから応答メッセージにコピーする。

・応答メッセージ中の保持時間をゼロより大きい明示的な値に設定する。

・応答メッセージ中の保持時間を MQEI_UNLIMITED に設定する。

実行される動作は,アプリケーションの設計に依存します。ただし,デッドレターキューにメッ セージを登録するときのデフォルトでは,メッセージの残りの保持時間を保存し,減算を継続 します。

9. トリガメッセージは,常に MQEI_UNLIMITED オプションで生成されます。

10. Format フィールドの名称が MQFMT_XMIT_Q_HEADER であるメッセージには,MQXQH 構造体に二つ目のメッセージ記述子があります。通常,これらのメッセージは転送キューに格

納されています。つまり,二つの Expiry フィールドがあります。この場合,次の点に注意して ください。

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