10.4 特定メッセージの取り出し

キューから特定メッセージを取り出すには,MQMD構造体のMsgIdおよびCorrelIdフィールドを使用してください。しかし,アプリケーションで明示的にこれらのフィールドを設定できるので,ユーザが指定した値でユニークなメッセージを識別できないこともあります。MsgIdおよびCorrelIdフィールドを指定する取り出しについて,次の表に示します。MQGET命令のGetMsgOptsパラメタにMQGMO_MSG_UNDER_CURSORを指定する場合,これらのフィールドは無視されます。

表10-1 MsgIdおよびCorrelIdフィールドを指定する取り出し

取り出されるメッセージMsgIdCorrelId
キューの最初のメッセージMQMI_NONEMQCI_NONE
MsgIdに合う最初のメッセージ0以外MQCI_NONE
CorrelIdに合う最初のメッセージMQMI_NONE0以外
MsgIdとCorrelIdの両方に合う最初のメッセージ0以外0以外

それぞれ,選択基準を満たす最初のメッセージが取り出されます。MQGMO_BROWSE_NEXTを指定する場合は,選択基準を満たす次のメッセージが取り出されます。

戻り時にMQGET命令はメッセージに関連するMsgIdとCorrelIdフィールドを設定します。

MQMD構造体のVersionフィールドに2を設定する場合は,GroupId,MsgSeqNumber,およびOffsetフィールドを使用できます。一致オプションと取り出されるメッセージについて,次の表に示します。

表10-2 一致オプションと取り出されるメッセージ

取り出されるメッセージ一致オプション
キューの最初のメッセージ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 論理的順序と物理的順序」を参照してください。
注意
  1. MQGET命令は常に最初のメッセージをキューから取り出します。MQGET命令を使用するときに特定メッセージを指定する場合,キューマネジャは該当メッセージを見つけるまでキューを検索します。そのため,アプリケーションの性能に影響することがあります。
  2. MQMD構造体のバージョン2を使用する場合は,MQMO_MATCH_MSG_IDおよびMQMO_MATCH_CORREL_IDを使用できます。このとき,MQGET命令間でMsgIdおよびCorrelIdフィールドをリセットする必要はありません。