20.9.4. クラスター化されたグルーピング

クラスター化されたグルーピングは通常のメッセージのグループ化とは方法が異なります。クラスターでは、特定のグループ ID を持つメッセージグループはいずれかのノードに到達できます。どのグループ ID がどのノードでどのコンシューマーにバインドされるかを判断することが重要になります。各ノードは、メッセージグループがデフォルトで到達する場所に関係なく、グループ ID を処理するコンシューマーを持つノードへメッセージグループをルーティングする必要があります。
この状況はグルーピングハンドラーによって対処されます。各ノードにグルーピングハンドラーがあり、このグルーピングハンドラー (他のハンドラーとともに) によってメッセージグループが正しいノードへルーティングされます。グルーピングハンドラーには localremote の 2 つがあります。
ローカルハンドラーは、メッセージグループが取るルートを決定します。リモートハンドラーはローカルハンドラーと通信し、動作します。各クラスターは、特定のノードを選択してローカルグルーピングハンドラーを持つ必要があり、他のすべてのノードはリモートハンドラーが必要になります。
以下のように local および remote グルーピングハンドラーをサーバー設定ファイル (standalone.xml および domain.xml) で設定できます。
<grouping-handler name="my-grouping-handler">
   <type>LOCAL</type>
   <address>jms</address>
   <timeout>5000</timeout>
</grouping-handler>

<grouping-handler name="my-grouping-handler">
   <type>REMOTE</type>
   <address>jms</address>
   <timeout>5000</timeout>
</grouping-handler>
timeout 属性は、指定時間内にルーティングが決定されるようにします。この時間内にルーティングが決定しないと、例外が発生します。
最初にメッセージグループを受け取るノードが、通常のクラスタールーティング条件 (ラウンドロビン方式のキューの可用性) を基にルーティングを決定します。ノードはこの決定を対応するグルーピングハンドラーへ提案し、提案が許可された場合はメッセージを提案したキューへルーティングします。
グルーピングハンドラーが提案を拒否した場合、グルーピングハンドラーは他のルートを提案し、その提案に従ってルーティングが実行されます。他のノードもそれに従い、選択されたキューへメッセージグループを転送します。メッセージがキューに到達すると、そのキューのカスタマーへ固定されます。