Hitachi

OpenTP1 Version 7 OpenTP1 メッセージキューイング機能 TP1/Message Queue プログラム作成の手引


10.8.1 検索カーソル

検索のためにキューをオープンするとき,命令は検索オプションのMQGET命令で使用するための検索カーソルを生成します。検索カーソルは,キューの最初のメッセージの前に位置づけられる論理的なポインタです。

同じキューに対してMQOPEN命令を複数発行することによって,一つのアプリケーションで複数の検索カーソルを有効にできます。

検索用にMQGET命令を発行するときには,MQGMO構造体には次に示すオプションを指定してください。

MQGMO_BROWSE_FIRST

MQMD構造体で指定された条件を満たす最初のメッセージを取り出します。

MQGMO_BROWSE_NEXT

MQMD構造体で指定された条件を満たす次のメッセージを取り出します。

どちらの場合も,メッセージはキューに残ります。

キューをオープンするとき,検索カーソルはキューで最初のメッセージの直前に位置づけられます。そのため,MQOPEN命令の直後にMQGET命令を発行する場合は,最初のメッセージを検索するのにMQGMO_BROWSE_NEXTを指定できます。MQGMO_BROWSE_FIRSTを指定しなくてもかまいません。

キューからメッセージが取り出される順序は,キューのMsgDeliverySequence属性によって決定されます。詳細については,「10.3 メッセージがキューから取り出される順序」を参照してください。

〈この項の構成〉

(1) FIFO順のキュー

FIFO順でキューにある最初のメッセージは,最も長い時間キューにあるメッセージです。

キューのメッセージを順に読み込むには,MQGMO_BROWSE_NEXTを使用してください。この順でキューの最後までメッセージを持っている場合には,任意のメッセージを検索できます。キューの最後に届いたとき,検索カーソルはその位置で止まりMQRC_NO_MSG_AVAILABLEを返します。追加のメッセージが到着することを待ってそのままにしたり,またはMQGMO_BROWSE_FIRSTの指定でリセットしてキューの最初に移動させたりしてください。

(2) 優先度順のキュー

優先度順でキューにある最初のメッセージは,最も長い時間キューにあるメッセージで,MQOPEN命令の発行時に最も高い優先度を指定されたメッセージです。

キューのメッセージを読み込むには,MQGMO_BROWSE_NEXTを使用してください。

検索カーソルは次のメッセージを指します。最高の優先度のメッセージから始まり,最低の優先度のメッセージで終わります。現在の検索カーソルによって識別されるメッセージと同等またはそれ以下のメッセージが続く間は,キューに登録されたメッセージを検索します。

キューに登録された優先度の高いメッセージが検索されるのは,次に示す場合だけです。

(3) コミット待ちメッセージ

コミット待ちメッセージは,検索時に検出されません。検索カーソルは読み飛ばします。トランザクション内のメッセージは,コミットされるまで検索されません。コミット時もメッセージのキューでの位置は変わらないため,読み飛ばされたコミット待ちメッセージはコミット後も読めません。読み直すには,MQGMO_BROWSE_FIRSTを使用します。