14.4. メッセージ再分配の有効化
ブローカークラスターで message-load-balancing
が ON_DEMAND
または OFF_WITH_REDISTRIBUTION
に設定されている場合、メッセージを消費するコンシューマーが存在しないキューにメッセージが "stuck" にならないように、メッセージの再配布 を設定できます。
このセクションでは、以下の情報を提供します。
14.4.1. メッセージ再分配について
ブローカークラスターは負荷分散を使用して、メッセージの負荷をクラスター全体に分散します。クラスター接続で負荷分散を設定する場合は、以下の message-load-balancing
設定を使用して再分配を有効にできます。
-
ON_DEMAND
- 負荷分散を有効にし、再分配を許可します。 -
OFF_WITH_REDISTRIBUTION
- 負荷分散を無効にしますが、再分配を許可します。
いずれの場合も、ブローカーは一致するコンシューマーを持つ他のブローカーにのみメッセージを転送します。この動作により、メッセージがメッセージを消費するコンシューマーを持たないキューに移動されないようにします。ただし、メッセージがブローカーに転送された後にキューに接続されたコンシューマーが閉じられると、それらのメッセージはキューで "stuck" 状態になり、消費されなくなります。この問題は、不足と呼ばれることもあります。
メッセージ再分配は、一致するコンシューマーを持つクラスター内のコンシューマーのないキューからメッセージを自動的に再分配することで、不足を防ぎます。
OFF_WITH_REDISTRIBUTION
を使用すると、ブローカーは、アクティブなローカルコンシューマーがない場合に、一致するコンシューマーを持つ他のブローカーにのみメッセージを転送するため、コンシューマーが利用できない場合にブローカーの優先順位付けを実行できます。
メッセージ再分配は、フィルター ( セレクター とも呼ばれる ) の使用をサポートします。つまり、利用可能なローカルコンシューマーのセレクターと一致しない場合、メッセージは再分配されます。
関連情報
- クラスターの負荷分散に関する詳細は、「ブローカークラスターがメッセージ負荷のバランスを取る方法」 を参照してください。
14.4.2. メッセージ再分配の設定
この手順では、負荷分散を使用してメッセージ再分配を設定する方法を説明します。負荷分散なしでメッセージ再分配を行う場合は、<message-load-balancing>
を OFF_WITH_REDISTRIBUTION
に設定します。
手順
-
<broker_instance_dir>/etc/broker.xml
設定ファイルを開きます。 <cluster-connection>
要素で、<message-load-balancing>
がON_DEMAND
に設定されていることを確認します。<configuration> <core> ... <cluster-connections> <cluster-connection name="my-cluster"> ... <message-load-balancing>ON_DEMAND</message-load-balancing> ... </cluster-connection> </cluster-connections> </core> </configuration>
<address-settings>
要素内で、キューまたはキューのセットの再分配遅延を設定します。この例では、
my.queue
へのメッセージの負荷分散は、最後のコンシューマーが閉じられてから 5000 ミリ秒に再分散されます。<configuration> <core> ... <address-settings> <address-setting match="my.queue"> <redistribution-delay>5000</redistribution-delay> </address-setting> </address-settings> ... </core> </configuration>
address-setting
-
match
属性を、メッセージを再分配するキューの名前に設定します。ブローカーのワイルドカード構文を使用してキューの範囲を指定できます。詳細は、「アドレスセットへのアドレス設定の適用」 を参照してください。 redistribution-delay
-
このキューの最後のコンシューマーが閉じられてからクラスターの他のブローカーにメッセージを再分配するまでブローカーが待機する時間 ( ミリ秒単位 )。これを
0
に設定すると、メッセージは即座に再分配されます。ただし、通常は、再分配する前に遅延を設定する必要があります。コンシューマーを閉じるのは一般的ですが、同じキューに別のキューを迅速に作成する必要があります。
- クラスター内の追加のブローカーごとにこの手順を繰り返します。
関連情報
-
メッセージを再配布するブローカークラスター設定の例は、
queue-message-redistribution
の例 を参照してください。