14.5. クラスター化されたメッセージのグループ化の設定
メッセージのグループ化により、クライアントは特定のタイプのメッセージのグループを、同じコンシューマーによって順次処理できます。クラスターの各ブローカーにグルーピングハンドラーを追加すると、クライアントはグループ化されたメッセージをクラスター内のブローカーに送信し、それらのメッセージを同じコンシューマーによって正しい順序で消費できるようにします。
グループ化とクラスタリングの手法は次のように要約できます。
- メッセージのグループ化により、メッセージの消費に順序が生じます。グループでは、次のメッセージに進む前に、各メッセージが完全に消費され、確認される必要があります。この方法では、逐次的なメッセージ処理が行われ、同時で処理されることはありません。
- クラスタリングは、ブローカーを水平スケーリングしてメッセージのスループットを向上させることを目的としています。水平スケーリングは、メッセージを同時に処理できるコンシューマーを追加することで実現します。
これらの手法は相反するため、クラスタリングとグループ化の併用は避けてください。
グルーピングハンドラーには、ローカルハンドラーとリモートハンドラーの 2 つのタイプがあります。ブローカークラスターは、特定のグループのすべてのメッセージを適切なキューにルーティングし、目的のコンシューマーが正しい順序でそれらを使用できるようにします。
前提条件
クラスターの各ブローカーに少なくとも 1 つのコンシューマーが必要です。
メッセージがキュー上のコンシューマーに固定されると、同じグループ ID を持つすべてのメッセージがそのキューにルーティングされます。コンシューマーが削除されると、キューはコンシューマーがない場合でもメッセージを受信し続けます。
手順
クラスター内の 1 つのブローカーにローカルハンドラーを設定します。
高可用性を使用している場合、これはマスターブローカーである必要があります。
-
ブローカーの
<broker_instance_dir>/etc/broker.xml
設定ファイルを開きます。 <core>
要素内にローカルハンドラーを追加します。ローカルハンドラーはリモートハンドラーの Arbiter として機能します。ルート情報を保存し、これを他のブローカーと通信します。
<configuration> <core> ... <grouping-handler name="my-grouping-handler"> <type>LOCAL</type> <timeout>10000</timeout> </grouping-handler> ... </core> </configuration>
grouping-handler
-
name
属性を使用してグルーピングハンドラーに一意の名前を指定します。 type
-
これを
LOCAL
に設定します。 timeout
メッセージをルーティングする場所について決定する待機時間 (ミリ秒単位)。デフォルトは 5000 ミリ秒です。ルーティングを決定する前にタイムアウトに達すると、例外が発生します。これにより、厳格なメッセージの順序が確保されます。
ブローカーがグループ ID を持つメッセージを受信すると、コンシューマーが割り当てられるキューへのルートを提案します。ルートがクラスターの他のブローカーのグルーピングハンドラーによって許可される場合、ルートが確立されます。クラスター内のすべてのブローカーは、このグループ ID を持つメッセージをそのキューに転送します。ブローカーのルートプロポーザルが拒否されると、別のルートを提案し、ルートが受け入れられるまでプロセスを繰り返します。
-
ブローカーの
高可用性を使用している場合、ローカルハンドラー設定をマスターブローカーのスレーブブローカーにコピーします。
ローカルハンドラー設定をスレーブブローカーにコピーしても、ローカルハンドラーに対する単一障害点を防ぐことができます。
クラスターの残りの各ブローカーで、リモートハンドラーを設定します。
-
ブローカーの
<broker_instance_dir>/etc/broker.xml
設定ファイルを開きます。 <core>
要素内にリモートハンドラーを追加します。<configuration> <core> ... <grouping-handler name="my-grouping-handler"> <type>REMOTE</type> <timeout>5000</timeout> </grouping-handler> ... </core> </configuration>
grouping-handler
-
name
属性を使用してグルーピングハンドラーに一意の名前を指定します。 type
-
これは
REMOTE
に設定します。 timeout
- メッセージをルーティングする場所について決定する待機時間 (ミリ秒単位)。デフォルトは 5000 ミリ秒です。この値をローカルハンドラーの半分以上に設定します。
-
ブローカーの
関連情報
- メッセージのグループ化用に設定されたブローカークラスターの例については、JMS clustered grouping example を参照してください。