すべてのプロダクト
Search
ドキュメントセンター

ApsaraMQ for RabbitMQ:Exchange

最終更新日:Mar 18, 2025

このトピックでは、ApsaraMQ for RabbitMQ の Exchange の概念と種類について紹介します。Exchange を理解し、選択するのに役立ちます。

Exchange とは

Exchange は、ApsaraMQ for RabbitMQ のメッセージルーティングエージェントです。プロデューサーが ApsaraMQ for RabbitMQ ブローカーにメッセージを送信すると、メッセージは Exchange に送信され、Exchange はメッセージを 1 つ以上のキューにルーティングします。Exchange は、ルーティングキーとヘッダー属性に基づいてメッセージをルーティングします。

ダイレクト Exchange

  • ルーティングルール

    ダイレクト Exchange は、ルーティングキーがメッセージのルーティングキーと完全に一致するキューにメッセージをルーティングします。

  • シナリオ

    ダイレクト Exchange は、メッセージが単純な文字列で区別されるシナリオで使用できます。ほとんどの場合、ダイレクト Exchange はメッセージのユニキャストルーティングに使用されます。

  • 次の図は例を示しています。

    direct_exchange

    メッセージ

    ルーティングキー

    バインディングのルーティングキー

    キュー

    メッセージ A

    img.create

    img.create

    キュー A

    メッセージ B

    img.log

    img.log

    キュー B

トピック Exchange

  • ルーティングルール

    トピック Exchange は、ルーティングキーがメッセージのルーティングキーと部分的に一致するキューにメッセージをルーティングします。アスタリスク(*)または番号記号(#)は、部分一致をサポートするためにルーティングキーのワイルドカードとして使用されます。アスタリスク(*)は単語を示します。例: cn。番号記号(#)は、ピリオド(.)で区切られたゼロ、1 つ、または複数の単語を示します。例: cn.zj.hz。

  • シナリオ

    トピック Exchange は、メッセージがワイルドカードで区別されるシナリオで使用できます。ほとんどの場合、トピック Exchange はメッセージのマルチキャストルーティングに使用されます。たとえば、トピック Exchange を使用して地理位置データを配信できます。

  • 次の図は例を示しています。

    topic_exchange

    メッセージ

    ルーティングキー

    バインディングのルーティングキー

    キュー

    メッセージ A

    files.cn.hz

    files.cn.hz.#

    キュー A

    メッセージ B

    files.cn.hz.store

    • files.cn.hz.#

    • files.cn.*.store

    • キュー A

    • キュー B

    メッセージ C

    files.cn.sz.store

    files.cn.*.store

    キュー B

ファンアウト Exchange

  • ルーティングルール

    ファンアウト Exchange は、バインドされているすべてのキューにメッセージをルーティングします。ルーティングキーは無視されます。

  • シナリオ

    ファンアウト Exchange は、メッセージのブロードキャストルーティングに最適です。たとえば、配信システムでファンアウト Exchange を使用して、ステータスまたは構成の更新をブロードキャストできます。

  • 次の図は例を示しています。

    fanout_exchange

    メッセージ

    ルーティングキー

    バインディングのルーティングキー

    キュー

    メッセージ A

    img.create

    • files.cn.hz.#

    • queue.msgText

    • キュー A

    • キュー B

    メッセージ B

    queue.msgMap

    • files.cn.hz.#

    • queue.msgText

    • キュー A

    • キュー B

    メッセージ C

    cn.hz.topic.alarm

    • files.cn.hz.#

    • queue.msgText

    • キュー A

    • キュー B

ヘッダー Exchange

  • ルーティングルール

    ヘッダー Exchange は、特別なダイレクト Exchange と考えることができます。ダイレクト Exchange と同様の方法で動作します。違いは、ヘッダー Exchange はルーティングキーではなくヘッダー属性に基づいてキューにメッセージをルーティングすることです。ヘッダー Exchange をキューにバインドするときは、バインディングのキーと値の形式でバインディング属性を構成する必要があります。ヘッダー Exchange にメッセージを送信するときは、メッセージのキーと値の形式でヘッダー属性を構成する必要があります。ヘッダー Exchange はメッセージを受信した後、メッセージのヘッダー属性とバインドされたキューのバインディング属性の間の一致に基づいてメッセージをルーティングします。

    特別なバインディング属性 x-match を使用して、一致方法を決定します。x-match の値は all または any に設定できます。

    • all: ヘッダー Exchange は、x-match を除くキューのすべてのバインディング属性がメッセージのヘッダー属性と一致する場合にのみ、キューにメッセージをルーティングします。

    • any: ヘッダー Exchange は、x-match を除くキューの 1 つ以上のバインディング属性がメッセージのヘッダー属性と一致する場合、キューにメッセージをルーティングします。

    ヘッダー属性は、次のシナリオでバインディング属性と一致すると見なされます。

    • ヘッダー属性のキーと値は、バインディング属性のキーと値と同じです。

    • ヘッダー属性のキーはバインディング属性のキーと同じですが、バインディング属性の値は空です。

  • シナリオ

    ヘッダー Exchange は、メッセージが複数のヘッダー属性で区別されるシナリオで使用できます。ほとんどの場合、ヘッダー Exchange はメッセージのマルチキャストルーティングに使用されます。たとえば、ヘッダー Exchange を使用して、分類またはタグ付けされたニュースを配信できます。

  • 次の図は例を示しています。

    headers_exchange

    メッセージ

    メッセージのヘッダー属性

    バインディングのヘッダー属性

    キュー

    メッセージ A

    type=read
    resource=group
    • /* type=read */
      /* resource=group */
      /* x-match=all */
    • /* type=read */
      /* resource=topic */
      /* x-match=any */
    • キュー A

    • キュー B

    メッセージ B

    type=read
    /* type=read */
    /* resource=topic */
    /* x-match=any */

    キュー B

    メッセージ C

    type=write
    resource=topic
    /* type=read */
    /* resource=topic */
    /* x-match=any */

    キュー B

x-delayed-message Exchange

ApsaraMQ for RabbitMQ は、オープンソース RabbitMQ が提供する x-delayed-message Exchange と互換性があります。オープンソース RabbitMQ では、プラグインをインストールすることで x-delayed-message Exchange を使用できます。ApsaraMQ for RabbitMQ で x-delayed-message Exchange を使用するには、プラグインをインストールする必要はありません。x-delayed-message タイプの Exchange を宣言し、メッセージの x-delay ヘッダー属性を設定して、メッセージが配信されるまでの時間を指定するだけです。時間はミリ秒単位です。x-delay ヘッダー属性で指定された時間が経過すると、メッセージは対応するキューに配信されます。

  • ルーティングルール

    x-delayed-message Exchange は、x-delayed-type 拡張属性で指定された Exchange タイプに基づいてルーティングルールを決定します。次のタイプの Exchange は x-delayed-message タイプをサポートしています。

  • シナリオ

    x-delayed-message Exchange は、指定された遅延後にメッセージを配信する必要があるシナリオで使用できます。詳細については、「遅延メッセージ」をご参照ください。

  • x-delayed-message Exchange は、x-delayed-type 拡張属性で指定された Exchange タイプのルーティングルールに基づいてメッセージをルーティングします。次の図は、x-delayed-type 拡張属性が direct に設定されている x-delayed-message Exchange の例を示しています。

    x-delayed-message-exchange

    メッセージ

    x-delay

    ルーティングキー

    バインディングのルーティングキー

    キュー

    メッセージ A

    3000

    img.create

    img.create

    キュー A

    メッセージ B

    4000

    img.log

    img.log

    キュー B

    次の項目では、x-delayed-message Exchange がメッセージ A とメッセージ B をルーティングする方法について説明します。

    • x-delayed-message Exchange がメッセージ A を受信した後、x-delayed-message Exchange は 3,000 ミリ秒後にメッセージ A をキュー A に配信します。

    • x-delayed-message Exchange がメッセージ B を受信した後、x-delayed-message Exchange は 4,000 ミリ秒後にメッセージ B をキュー B に配信します。

x-consistent-hash Exchange

ApsaraMQ for RabbitMQ は、オープンソース RabbitMQ が提供する x-consistent-hash Exchange と互換性があります。オープンソース RabbitMQ では、プラグインをインストールすることで x-consistent-hash Exchange を使用できます。ApsaraMQ for RabbitMQ で x-consistent-hash Exchange を使用するには、プラグインをインストールする必要はありません。x-consistent-hash タイプの Exchange を宣言するだけです。

説明

x-consistent-hash Exchange は、ハッシュプロパティに基づくメッセージルーティングをサポートしていません。メッセージ ID、相関 ID、またはタイムスタンプを使用してルートを計算することはできません。

  • ルーティングルール

    • x-consistent-hash Exchange を使用すると、ルーティングキーまたはヘッダー値に基づいてメッセージをルーティングできます。x-consistent-hash Exchange はメッセージを受信した後、メッセージのルーティングキーまたはヘッダー値に基づいてハッシュ計算を実行し、メッセージのルーティング先のバインドされたキューを決定します。

    • 同じルーティングキーまたはヘッダー値を使用して計算されたハッシュ値は同じです。その結果、同じルーティングキーまたはヘッダー値を使用するメッセージは同じキューにルーティングされます。

    • ヘッダー値に基づいてメッセージをルーティングする場合は、hash-header パラメーターを使用して Exchange と使用するヘッダーを宣言する必要があります。また、プロデューサーがパブリッシュするメッセージには、hash-header パラメーターで指定されたヘッダーが含まれている必要があります。指定されたヘッダーが含まれていない場合、すべてのメッセージは同じランダムキューにルーティングされます。

    • ルーティングキーと hash-header パラメーターの両方が指定されている場合、ハッシュ計算は hash-header パラメーターの値に基づいて実行されます。

    • x-consistent-hash Exchange をキューにバインドするときは、値が 1 ~ 20 のルーティングキーを指定して、キューの重みを表す必要があります。値が大きいほど、重みが大きくなります。重みが大きいほど、Exchange が受信するメッセージが多くなります。

    • ルーティングキーの値が 20 より大きい場合、重みは 20 と見なされます。

    • 複数のバインディングが存在する場合、値が正の整数である最初のバインディングのみが有効です。キューの重みを変更する前に、既存のバインディングを削除する必要があります。

  • シナリオ

    x-consistent-hash Exchange は、メッセージが重みで分類されるシナリオで使用できます。

  • x-consistent-hash Exchange は、指定された方法を使用して計算されたハッシュ値に基づいて、キューにメッセージをルーティングします。Exchange にバインドされているキューの重みはさまざまで、メッセージは重みに基づいてキューにルーティングされます。次の図は、ルーティングキーに基づいてルーティングルールが計算される x-consistent-hash Exchange の例を示しています。

    x-consistent-hash

    メッセージ

    ルーティングキー

    メッセージ A

    cn.hz.1

    メッセージ B

    cn.hz.2

    メッセージ C

    cn.hz.3

    キュー

    バインディングのルーティングキー

    キュー A

    1

    キュー B

    2

    次の項目では、x-consistent-hash Exchange がメッセージ A、メッセージ B、およびメッセージ C をルーティングする方法について説明します。

    • メッセージ A、メッセージ B、およびメッセージ C が Exchange に到着した後、Exchange はルーティングキーに基づいて計算されたハッシュ値を使用してメッセージをキューに配信します。

    • Exchange はキュー A とキュー B にバインドされています。キュー A の重みは 1 で、キュー B の重みは 2 です。この場合、メッセージ A、メッセージ B、およびメッセージ C は、1:2 の重み比に基づいてキュー A とキュー B にルーティングされます。