16.4. メッセージ再分配の有効化
ブローカークラスターがオンデマンドメッセージの負荷分散を使用する場合、メッセージ再分配 を設定して、メッセージを消費するコンシューマーを持たないキューでメッセージがストックにならないようにすることができます。
本セクションでは、以下の情報を提供します。
16.4.1. メッセージ再分配について リンクのコピーリンクがクリップボードにコピーされました!
ブローカークラスターは負荷分散を使用して、メッセージの負荷をクラスター全体に分散します。クラスター接続で負荷分散を設定する場合、message-load-balancing を ON_DEMAND に設定すると、ブローカーは一致するコンシューマーを持つ他のブローカーにのみメッセージを転送します。この動作により、メッセージがメッセージを消費するコンシューマーを持たないキューに移動されないようにします。ただし、メッセージがブローカーに転送された後にキューにアタッチされたコンシューマーがブローカーに転送されると、これらのメッセージはキュー内でストックになり、消費されません。この問題は、不足と呼ばれることもあります。
メッセージ再分配は、一致するコンシューマーを持つクラスター内のコンシューマーのないキューからメッセージを自動的に再分配することで、不足を防ぎます。
16.4.1.1. メッセージフィルターを使用したメッセージ再分配の制限 リンクのコピーリンクがクリップボードにコピーされました!
メッセージ再分配は、コンシューマーによるフィルター (セレクターとも呼ばれる) の使用をサポートしません。フィルターのあるコンシューマーの一般的なユースケースは、相関 ID を使用したリクエストリプライパターンです。例として以下のシナリオを見てみましょう。
-
brokerAとbrokerBの 2 つのブローカーで設定されるクラスターがある。各ブローカーはredistribution-delayが0に設定され、message-load-balancingがON_DEMANDに設定された状態で設定されます。 -
brokerAおよびbrokerBには、それぞれmyQueueという名前のキューがあります。 -
リクエストに基づいて、プロデューサーは、
brokerAのキューmyQueueにルーティングされるメッセージを送信します。メッセージには、myCorrelIDという名前の相関 ID プロパティーがあり、値は10です。 -
コンシューマーは、
myCorrelID=5のフィルターでbrokerAのキューmyQueueに接続します。このフィルターはメッセージの相関 ID 値と一致しません。 別のコンシューマーは、
myCorrelID=10のフィルターでbrokerBのキューmyQueueに接続します。このフィルターはメッセージの相関 ID 値と一致します。この場合、
brokerBのコンシューマーのフィルターはメッセージに一致しますが、キューmyQueueのコンシューマーがbrokerAに存在するため、メッセージはbrokerAからbrokerBに再分配されません。
上記のシナリオでは、リクエストがプロデューサーに送信される 前 にコンシューマーを作成して、目的のクライアントがメッセージを受信するようにできます。このメッセージは、メッセージの相関 ID と一致するフィルターを持つコンシューマーに即座にルーティングされます。再分配は必要ありません。
関連情報
- クラスターの負荷分散に関する詳細は、「ブローカークラスターがメッセージ負荷のバランスを取る方法」 を参照してください。
16.4.2. メッセージ再分配の設定 リンクのコピーリンクがクリップボードにコピーされました!
この手順では、メッセージ再分配を設定する方法を説明します。
手順
-
<broker_instance_dir>/etc/broker.xml設定ファイルを開きます。 <cluster-connection>要素で、<message-load-balancing>が<ON_DEMAND>に設定されていることを確認します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow <address-settings>要素内で、キューまたはキューのセットの再分配遅延を設定します。この例では、
my.queueへのメッセージの負荷分散は、最後のコンシューマーが閉じられてから 5000 ミリ秒に再分散されます。Copy to Clipboard Copied! Toggle word wrap Toggle overflow address-setting-
match属性を、メッセージを再分配するキューの名前に設定します。ブローカーのワイルドカード構文を使用してキューの範囲を指定できます。詳細は、「アドレスセットへのアドレス設定の適用」 を参照してください。 redistribution-delay-
このキューの最後のコンシューマーが閉じられてからクラスターの他のブローカーにメッセージを再分配するまでブローカーが待機する時間 ( ミリ秒単位 )。これを
0に設定すると、メッセージは即座に再分配されます。ただし、通常は、再分配する前に遅延を設定する必要があります。コンシューマーを閉じるのは一般的ですが、同じキューに別のキューを迅速に作成する必要があります。
- クラスター内の追加のブローカーごとにこの手順を繰り返します。
関連情報
-
メッセージを再分散するブローカークラスター設定の例は、
queue-message-redistributionAMQ Broker のサンプルプログラム を参照してください。