Hitachi

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


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 メッセージのセグメント分割」を参照してください。