3.6 メッセージグループ
メッセージグループはTP1/Message Queue 05-00以降でサポートします。
メッセージはグループ内にあります。これによって,メッセージの順序付けができます。また,同じグループ内では長大メッセージのセグメント分割ができます。
グループ内での階層を次に示します。
- グループ
-
GroupIdによって識別される最高階層です。同じGroupIdを持つ一つ以上のメッセージから構成されます。これらのメッセージはキューの任意の場所に登録されます。
- 注意
-
メッセージという用語は,ここではキュー上の1項目を表します。例えば,MQGMO_COMPLETE_MSGを指定しないMQGET命令1回で返される項目です。
論理メッセージのグループについて,次の図に示します。
図3‒3 論理メッセージのグループ - 論理メッセージ
-
グループ内の論理メッセージはGroupIdおよびMsgSeqNumberフィールドによって識別されます。MsgSeqNumberはグループ内の最初のメッセージ1から始まります。グループ内にメッセージがない場合にもフィールドの値は1になります。
グループ内の論理メッセージは次に示す目的に使用できます。
-
順序性の保証(メッセージが転送される環境で保証されないとき)
-
アプリケーションによる同種メッセージ(例えば,同じサーバインスタンスで処理したいメッセージ)のグループ化
セグメント分割されていないかぎり,グループ内の各メッセージは一つの物理メッセージで構成されます。各メッセージは論理的には別メッセージであり,MQMD構造体のGroupIdおよびMsgSeqNumberフィールドだけでグループ内の他メッセージとの関係を持つことになります。MQMD構造体の他フィールドは関係ありません。すべてのメッセージで同じ値のフィールドもあるし,異なる値のフィールドもあります。例えば,一つのグループのメッセージで異なるフォーマット名,CCSID,マシンコード形式などを持つことがあります。
-
- セグメント
-
メッセージを登録したり取り出したりするアプリケーションやキューマネジャ(メッセージの転送経路のキューマネジャを含む)にとって,長過ぎるメッセージを処理するのに,セグメントが使用されます。詳細については,「10.5.2 メッセージのセグメント分割」を参照してください。
メッセージのセグメントはGroupId,MsgSeqNumber,およびOffsetフィールドで識別されます。Offsetフィールドはメッセージ内の最初のセグメント0から始まります。
各セグメントは一つの物理メッセージで構成され,グループに属したり属さなかったりします。セグメントは論理的には1メッセージの部分です。そのため,同じメッセージの異なるセグメントでは,MQMD構造体のMsgId,Offset,およびMsgFlagsフィールドだけが異なります。
セグメント分割された論理メッセージのグループについて,次の図に示します。
図3‒4 セグメント分割された論理メッセージのグループ
論理メッセージおよび物理メッセージについては,「10.3.2 論理的順序と物理的順序」を参照してください。メッセージのセグメント分割については,「10.5.2 メッセージのセグメント分割」を参照してください。