Hitachi

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


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

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

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

取り出されるメッセージ

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フィールドを使用できます。一致オプションと取り出されるメッセージについて,次の表に示します。

表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フィールドをリセットする必要はありません。