16.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 ミリ秒です。この値をローカルハンドラーの半分以上に設定します。
-
ブローカーの
関連情報
-
メッセージのグループ化に設定されたブローカークラスターの例は、
clustered-grouping
AMQ Broker example program を参照してください。