16.4. メッセージ再分配の有効化


ブローカークラスターがオンデマンドメッセージの負荷分散を使用する場合、メッセージ再分配 を設定して、メッセージを消費するコンシューマーを持たないキューでメッセージがストックにならないようにすることができます。

本セクションでは、以下の情報を提供します。

16.4.1. メッセージ再分配について

ブローカークラスターは負荷分散を使用して、メッセージの負荷をクラスター全体に分散します。クラスター接続で負荷分散を設定する場合、message-load-balancingON_DEMAND に設定すると、ブローカーは一致するコンシューマーを持つ他のブローカーにのみメッセージを転送します。この動作により、メッセージがメッセージを消費するコンシューマーを持たないキューに移動されないようにします。ただし、メッセージがブローカーに転送された後にキューにアタッチされたコンシューマーがブローカーに転送されると、これらのメッセージはキュー内でストックになり、消費されません。この問題は、不足と呼ばれることもあります。

メッセージ再分配は、一致するコンシューマーを持つクラスター内のコンシューマーのないキューからメッセージを自動的に再分配することで、不足を防ぎます。

16.4.1.1. メッセージフィルターを使用したメッセージ再分配の制限

メッセージ再分配は、コンシューマーによるフィルター (セレクターとも呼ばれる) の使用をサポートしません。フィルターのあるコンシューマーの一般的なユースケースは、相関 ID を使用したリクエストリプライパターンです。例として以下のシナリオを見てみましょう。

  1. brokerAbrokerB の 2 つのブローカーで設定されるクラスターがある。各ブローカーは redistribution-delay0 に設定され、message-load-balancingON_DEMAND に設定された状態で設定されます。
  2. brokerA および brokerB には、それぞれ myQueue という名前のキューがあります。
  3. リクエストに基づいて、プロデューサーは、brokerA のキュー myQueue にルーティングされるメッセージを送信します。メッセージには、myCorrelID という名前の相関 ID プロパティーがあり、値は 10 です。
  4. コンシューマーは、myCorrelID=5 のフィルターで brokerA のキュー myQueue に接続します。このフィルターはメッセージの相関 ID 値と一致しません。
  5. 別のコンシューマーは、myCorrelID=10 のフィルターで brokerB のキュー myQueue に接続します。このフィルターはメッセージの相関 ID 値と一致します。

    この場合、brokerB のコンシューマーのフィルターはメッセージに一致しますが、キュー myQueue のコンシューマーが brokerA に存在するため、メッセージは brokerA から brokerB に再分配されません

上記のシナリオでは、リクエストがプロデューサーに送信される にコンシューマーを作成して、目的のクライアントがメッセージを受信するようにできます。このメッセージは、メッセージの相関 ID と一致するフィルターを持つコンシューマーに即座にルーティングされます。再分配は必要ありません。

関連情報

16.4.2. メッセージ再分配の設定

この手順では、メッセージ再分配を設定する方法を説明します。

手順

  1. <broker_instance_dir>/etc/broker.xml 設定ファイルを開きます。
  2. <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>
    Copy to Clipboard Toggle word wrap
  3. <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>
    Copy to Clipboard Toggle word wrap
    address-setting
    match 属性を、メッセージを再分配するキューの名前に設定します。ブローカーのワイルドカード構文を使用してキューの範囲を指定できます。詳細は、「アドレスセットへのアドレス設定の適用」 を参照してください。
    redistribution-delay
    このキューの最後のコンシューマーが閉じられてからクラスターの他のブローカーにメッセージを再分配するまでブローカーが待機する時間 ( ミリ秒単位 )。これを 0 に設定すると、メッセージは即座に再分配されます。ただし、通常は、再分配する前に遅延を設定する必要があります。コンシューマーを閉じるのは一般的ですが、同じキューに別のキューを迅速に作成する必要があります。
  4. クラスター内の追加のブローカーごとにこの手順を繰り返します。

関連情報

トップに戻る
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。 最新の更新を見る.

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

Theme

© 2025 Red Hat