10.4 特定メッセージの取り出し
キューから特定メッセージを取り出すには,MQMD構造体のMsgIdおよびCorrelIdフィールドを使用してください。しかし,アプリケーションで明示的にこれらのフィールドを設定できるので,ユーザが指定した値でユニークなメッセージを識別できないこともあります。MsgIdおよびCorrelIdフィールドを指定する取り出しについて,次の表に示します。MQGET命令のGetMsgOptsパラメタにMQGMO_MSG_UNDER_CURSORを指定する場合,これらのフィールドは無視されます。
取り出されるメッセージ |
MsgId |
CorrelId |
---|---|---|
キューの最初のメッセージ |
MQMI_NONE |
MQCI_NONE |
MsgIdに合う最初のメッセージ |
0以外 |
MQCI_NONE |
CorrelIdに合う最初のメッセージ |
MQMI_NONE |
0以外 |
MsgIdとCorrelIdの両方に合う最初のメッセージ |
0以外 |
0以外 |
それぞれ,選択基準を満たす最初のメッセージが取り出されます。MQGMO_BROWSE_NEXTを指定する場合は,選択基準を満たす次のメッセージが取り出されます。
戻り時にMQGET命令はメッセージに関連するMsgIdとCorrelIdフィールドを設定します。
MQMD構造体のVersionフィールドに2を設定する場合は,GroupId,MsgSeqNumber,およびOffsetフィールドを使用できます。一致オプションと取り出されるメッセージについて,次の表に示します。
取り出されるメッセージ |
一致オプション |
---|---|
キューの最初のメッセージ |
MQMO_NONE |
MsgIdに合う最初のメッセージ |
MQMO_MATCH_MSG_ID |
CorrelIdに合う最初のメッセージ |
MQMO_MATCH_CORREL_ID |
GroupIdに合う最初のメッセージ |
MQMO_MATCH_GROUP_ID |
MsgSeqNumberに合う最初のメッセージ |
MQMO_MATCH_MSG_SEQ_NUMBER |
Offsetに合う最初のメッセージ |
MQMO_MATCH_OFFSET |
- 注1
-
MQMO_MATCH_XXXは,MQMD構造体のXXXというフィールドに合うメッセージを指定します。
- 注2
-
MQMOフラグは組み合わせて使用できます。例えば,MQMO_MATCH_GROUP_ID,MQMO_MATCH_MSG_SEQ_NUMBER,およびMQMO_MATCH_OFFSETを同時に使用して,GroupId,MsgSeqNumber,およびOffsetフィールドに合うセグメントを指定できます。
- 注3
-
MQGMO_LOGICAL_ORDERを指定する場合は,取り出しメッセージに影響があります。キューハンドル用に制御される情報にオプションが依存するからです。詳細については,「10.3.2 論理的順序と物理的順序」を参照してください。
- 注意
-
-
MQGET命令は常に最初のメッセージをキューから取り出します。MQGET命令を使用するときに特定メッセージを指定する場合,キューマネジャは該当メッセージを見つけるまでキューを検索します。そのため,アプリケーションの性能に影響することがあります。
-
MQMD構造体のバージョン2を使用する場合は,MQMO_MATCH_MSG_IDおよびMQMO_MATCH_CORREL_IDを使用できます。このとき,MQGET命令間でMsgIdおよびCorrelIdフィールドをリセットする必要はありません。
-