メッセージグループはTP1/Message Queue 05-00以降でサポートします。
メッセージはグループ内にあります。これによって,メッセージの順序付けができます。また,同じグループ内では長大メッセージのセグメント分割ができます。
グループ内での階層を次に示します。
- グループ
- GroupIdによって識別される最高階層です。同じGroupIdを持つ一つ以上のメッセージから構成されます。これらのメッセージはキューの任意の場所に登録されます。
- 注意
- メッセージという用語は,ここではキュー上の1項目を表します。例えば,MQGMO_COMPLETE_MSGを指定しないMQGET命令1回で返される項目です。
- 論理メッセージのグループについて,次の図に示します。
図3-3 論理メッセージのグループ
![[図データ]](figure/zu030200.gif)
- 論理メッセージ
- グループ内の論理メッセージは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 セグメント分割された論理メッセージのグループ
![[図データ]](figure/zu030300.gif)
論理メッセージおよび物理メッセージについては,「10.3.2 論理的順序と物理的順序」を参照してください。メッセージのセグメント分割については,「10.5.2 メッセージのセグメント分割」を参照してください。