ここでは,キューの各メッセージを論理的順序で一とおり検索する例を示します。
キューのメッセージはグループ化されていたり,されていなかったりします。グループ化されたメッセージには,グループ内のすべてのメッセージが到着するまで,アプリケーションでグループの処理を開始させたくないことがあります。そのときはMQGMO_ALL_MSGS_AVAILABLEをグループの最初のメッセージに指定します。グループ内の以降のメッセージには,このオプションは不要です。
この例ではMQGMO_WAITを使用します。待ち合わせは新規グループが到着すると完了します。ただし,検索カーソルがグループ内の最初の論理メッセージを過ぎていると残りのメッセージが到着しても,完了しません。また,一定間隔で待ち合わせることによって,新規メッセージまたはセグメントを待つ間にアプリケーションがループに入ったままにならないようにできます。
論理的順序の検索を指定するために,最初から最後までMQGMO_LOGICAL_ORDERを使用します。これはメッセージを削除するMQGET命令の例とは異なる点です。メッセージを削除するMQGET命令の例では各グループが削除されるので,グループ内の最初または唯一のメッセージを検索するときにMQGMO_LOGICAL_ORDERは使用しません。
アプリケーションのバッファは,メッセージのセグメント分割の有無に関係なく,メッセージ全体を保持するのに十分な大きさがあるとします。そのためMQGET命令にはMQGMO_COMPLETE_MSGを指定します。
グループ内の論理メッセージの検索の例について,次に示します。
/* グループ内の最初のメッセージ,
またはグループにないメッセージの検索 */
GMO.Options = MQGMO_BROWSE_NEXT | MQGMO_COMPLETE_MSG
| MQGMO_LOGICAL_ORDER | MQGMO_ALL_MSGS_AVAILABLE
| MQGMO_WAIT
MQGET GMO.MatchOptions = MQMO_MATCH_MSG_SEQ_NUMBER,
MD.MsgSeqNumber = 1
/* 最初または唯一のメッセージの確認 */
...
GMO.Options = MQGMO_BROWSE_NEXT | MQGMO_COMPLETE_MSG
| MQGMO_LOGICAL_ORDER
while ( GroupStatus == MQGS_MSG_IN_GROUP ) {
MQGET
/* グループ内の残りのメッセージの確認 */
...
}
上記の検索はMQRC_NO_MSG_AVAILABLEが返されるまで繰り返されます。