4.22. アドレスおよびキューのフェデレーション


フェデレーションにより、ブローカーを共通のクラスターに入れることなく、ブローカー間のメッセージの転送が可能になります。ブローカーはスタンドアロンまたは個別のクラスターになります。さらに、ソースおよびターゲットブローカーはさまざまな管理ドメインに配置できます。つまり、ブローカーには異なる設定、ユーザー、およびセキュリティー設定を指定できます。ブローカーは、異なるバージョンの AMQ Broker を使用している場合もあります。

たとえば、フェデレーションは、メッセージをあるクラスターから別のクラスターへ確実に送信するのに適しています。この送信は、大規模なエリアネットワーク (WAN)、クラウドインフラストラクチャーの リージョン、またはインターネット上である可能性があります。ソースブローカーからターゲットブローカーへの接続が失われた場合 (ネットワーク障害などの理由により)、ソースブローカーはターゲットブローカーがオンラインに戻るまで接続を再確立しようとします。ターゲットブローカーがオンラインに戻ると、メッセージ送信が再開します。

管理者は、アドレスポリシーおよびキューポリシーを使用してフェデレーションを管理できます。ポリシー設定は特定のアドレスまたはキューに一致させることができます。また、ポリシーには、アドレスまたは キューのセットに対して設定に一致するワイルドカード式を含めることができます。そのため、フェデレーションは、一致するセットからキューまたはアドレスが追加されるか、削除されるため、動的に適用できます。ポリシーには、特定のアドレスやキューを含む、または除外する 複数の式を含めることができます。さらに、複数のポリシーをブローカーまたはブローカークラスターに適用できます。

AMQ Broker では、2 つの主なフェデレーションオプションは アドレスフェデレーションキューフェデレーションです。これらのオプションは、これ以降のセクションで説明します。

注記

ブローカーには、フェデレーションされたコンポーネントおよびローカルのみのコンポーネントの設定を含めることができます。つまり、ブローカーでフェデレーションを設定する場合は、そのブローカーですべてをフェデレーションする必要はありません。

4.22.1. アドレスフェデレーションについて

アドレスのフェデレーションは、接続されたブローカー間の完全なマルチキャスト分散パターンと似ています。たとえば、BrokerA のアドレスに送信されたすべてのメッセージは、そのブローカーのすべてのキューに送信されます。さらに、各メッセージは BrokerB および割り当てられたすべてのキューに配信されます。

アドレスフェデレーションは、ブローカーを動的にリモートブローカーのアドレスにリンクします。たとえば、ローカルブローカーがリモートブローカーのアドレスからメッセージをフェッチする場合は、リモートアドレスにキューが自動的に作成されます。その後、リモートブローカーのメッセージはこのキューによって使用されます。最後に、メッセージは最初にローカルアドレスに直接公開されていましたが、メッセージはローカルブローカーの対応するアドレスにコピーされます。

フェデレーションがアドレスを作成できるように、リモートブローカーを再設定する必要はありません。ただし、ローカルブローカーには リモートアドレスに対するパーミッションを付与する必要があります

4.22.2. アドレスフェデレーションの一般的なトポロジー

アドレスフェデレーションを使用する一般的なトポロジーの一部を以下に示します。

対称トポロジー

対称トポロジーでは、プロデューサーとコンシューマーは各ブローカーに接続されます。キューとそのコンシューマーは、いずれかのプロデューサーによって公開されるメッセージを受信できます。対称トポロジーの例を以下に示します。

図4.1 対称トポロジーにおけるアドレスフェデレーション

対称アドレスフェデレーション

対称トポロジーのアドレスフェデレーションを設定する場合は、アドレスポリシーの max-hops プロパティーの値を 1 に設定することが重要です。これにより、メッセージが 1 回だけ コピーされ、cyclic レプリケーションは回避されます。このプロパティーを大きな値に設定すると、コンシューマーは同じメッセージの複数のコピーを受け取ります。

完全なメッシュトポロジー

完全なメッシュトポロジーは対称設定と似ています。3 つ以上のブローカーは相互に対称的に分散し、完全なメッシュを作成します。この設定では、プロデューサーとコンシューマーは各ブローカーに接続されます。キューとそのコンシューマーは任意のプロデューサーによって公開されるメッセージを受信できます。このトポロジーの例を以下に示します。

図4.2 完全なメッシュトポロジーにおけるアドレスフェデレーション

完全なメッシュアドレスフェデレーション

対称設定の場合、完全なメッシュトポロジーのアドレスフェデレーションを設定する場合は、アドレスポリシーの max-hops プロパティーの値を 1 に設定することが重要です。これにより、メッセージが 1 回だけ コピーされ、cyclic レプリケーションは回避されます。

リングトポロジー

ブローカーのリングでは、各フェデレーションされたアドレスは、リング内の 1 つだけに対してアップストリームになります。このトポロジーの例を以下に示します。

図4.3 リングトポロジーにおけるアドレスフェデレーション

リングアドレスフェデレーション

リングトポロジーのフェデレーションを設定する場合は、循環レプリケーションを回避するために、アドレスポリシーの max-hops プロパティーを n-1 の値に設定することが重要です。ここで、nはリング内のノード数になります。たとえば、上記のリングトポロジーでは、max-hops の値は 5 に設定されます。これにより、リング内のすべてのアドレスがメッセージが 1 度だけ 見えるようになります。

リングトポロジーの利点は、必要な物理接続の数において、チャイルがセットアップすることです。ただし、このタイプのトポロジーの欠点は、1 つのブローカーが失敗した場合にリング全体が失敗することです。

fan-out トポロジー

ファンアウトトポロジーでは、単一のマスターアドレスはフェデレーションされたアドレスのツリーによってリンクされます。マスターアドレスに公開されたすべてのメッセージは、ツリー内の任意のブローカーに接続しているすべてのコンシューマーによって受信できます。ツリーは、深さに設定できます。ツリー内に既存のブローカーを再設定しなくても、ツリーを拡張することもできます。このトポロジーの例を以下に示します。

図4.4 ファンアウトトポロジーでのアドレスフェデレーション

Fan out address federation

ファンアウトトポロジーのフェデレーションを設定する場合は、アドレスポリシーの max-hops プロパティーを n-1 の値に設定します。ここで、n ツリー内のレベル数になります。たとえば、上記の fan-out トポロジーでは、max-hops の値は 2 に設定されます。これにより、ツリー内のすべてのアドレスがメッセージが 1 度だけ 見えるようになります。

4.22.3. アドレスフェデレーション設定での迂回バインディングのサポート

アドレスフェデレーションを設定する際に、アドレスポリシー設定に迂回バインディングのサポートを追加できます。このサポートを追加すると、フェデレーションが迂回バインディングに応答し、リモートブローカーの指定のアドレスのフェデレーションされたコンシューマーを作成できます。

たとえば、test.federation.source というアドレスがアドレスポリシーに含まれ、test.federation.target という別のアドレスが含まれていない場合は、通常、キューが test.federation.target に作成されると、アドレスポリシーの一部ではないため、フェデレーションされたコンシューマーが作成されません。ただし、test.federation.source がソースアドレスで test.federation.target が転送アドレスに、永続コンシューマーを作成すると、転送アドレスに永続コンシューマーが作成されます。ソースアドレスは引き続き multicast ルーティングタイプを使用する必要がありますが、ターゲットアドレスは multicast または anycast を使用できます。

ユースケースの例は、JMS トピック (multicast アドレス) を JMS キュー (anycast アドレス) にリダイレクトする迂回です。これにより、JMS 2.0 および共有サブスクリプションをサポートしないレガシーコンシューマーのトピックへのメッセージの負荷分散が可能になります。

4.22.4. ブローカークラスターのフェデレーションの設定

以下のセクションの例では、standaloneローカルブローカーとリモートブローカーとの間でアドレスとキューのフェデレーションを設定する方法について示しています。スタンドアロンブローカー間のフェデレーションの場合、フェデレーション設定の名前、およびアドレスおよびキューポリシー名はローカルブローカーとリモートブローカー間で一意である必要があります。

ただし、clusterでブローカーのフェデレーションを設定する場合は、追加の要件があります。クラスター化されたブローカーでは、フェデレーション設定の名前と、その設定内のアドレスおよびキューポリシーの名前 が、クラスター内の各ブローカーで同じである必要があります

同じクラスターのブローカーが同じフェデレーション設定およびアドレスおよびキューポリシー名を使用するようにし、メッセージの重複を回避します。たとえば、同じクラスター内のブローカーに異なるフェデレーション設定名がある場合、複数の方法で名前が異なる転送キューが作成される場合があり、ダウンストリームのコンシューマーでメッセージの重複が生じます。一方、同じクラスターのブローカーが同じフェデレーション設定名を使用する場合、基本的にはダウンストリームのコンシューマーに負荷分散される複製された、クラスター転送キューを作成します。これにより、メッセージの重複が回避されます。

4.22.5. アップストリームのアドレスフェデレーションの設定

以下の例は、スタンドアロンブローカー間でアップストリームのアドレスフェデレーションを設定する方法を示しています。この例では、ローカル (つまりダウンストリーム) ブローカーから一部のリモート (つまりアップストリーム) ブローカーへのフェデレーションを設定します。

前提条件

  • 以下の例は、スタンドアロンブローカー間でアドレスフェデレーションを設定する方法を示しています。ただし、ブローカー クラスター のフェデレーションを設定するための要件も理解している必要があります。詳細は、「ブローカークラスターのフェデレーションの設定」 を参照してください。

手順

  1. <broker_instance_dir>/etc/broker.xml 設定ファイルを開きます。
  2. <federation> 要素が含まれる新しい <federations > 要素を追加します。以下に例を示します。

    <federations>
      <federation name="eu-north-1" user="federation_username" password="32a10275cf4ab4e9">
      </federation>
    </federations>
    name
    フェデレーション設定の名前。この例では、名前はローカルブローカーの名前に対応します。
    user
    アップストリームブローカーに接続するための共有ユーザー名。
    password
    アップストリームブローカーに接続するための共有パスワード。
    注記

    ユーザーとパスワードの認証情報がリモートブローカーごとに異なる場合は、設定に追加する時にこれらのブローカーの認証情報を個別に指定できます。これは、この手順の後半で説明します。

  3. federation 要素内に <address-policy> 要素を追加します。以下に例を示します。

    <federations>
        <federation name="eu-north-1" user="federation_username" password="32a10275cf4ab4e9">
    
            <address-policy name="news-address-federation" auto-delete="true" auto-delete-delay="300000" auto-delete-message-count="-1" enable-divert-bindings="false" max-hops="1" transformer-ref="news-transformer">
            </address-policy>
    
        </federation>
    </federations>
    name
    アドレスポリシーの名前。ブローカーに設定されるアドレスポリシーはすべて一意の名前を指定する必要があります。
    auto-delete
    アドレスのフェデレーション時に、ローカルブローカーはリモートアドレスに永続キューを動的に作成します。auto-delete プロパティーの値は、ローカルブローカーの切断後にリモートキューを削除するかどうかを指定します。また、auto-delete-delay および auto- delete-message-count プロパティーの値も到達するかどうかを指定します。動的に作成されたキューのクリーンアップを自動化する場合に便利なオプションです。また、ローカルブローカーが長時間切断されている場合に、リモートブローカーでメッセージをビルドできないようにする場合にも便利なオプションです。ただし、接続されていない間にメッセージをローカルブローカーに対して常にキューに入れる必要がある場合、このオプションを false に設定します。これにより、ローカルブローカーでメッセージが失われないようにします。
    auto-delete-delay
    ローカルブローカーが切断されると、このプロパティーの値は、動的に作成されるリモートキューが自動的に削除されるまでの時間 (ミリ秒単位) を指定します。
    auto-delete-message-count
    ローカルブローカーが切断されると、このプロパティーの値は、キューが自動的に削除される前に動的に作成されたリモートキューにあるメッセージの最大数を指定します。
    enable-divert-bindings
    このプロパティーを true に設定すると、迂回バインディングは必要に応じてリッスンできます。アドレスポリシーに含まれるアドレスに一致するアドレスを持つ迂回バインディングがある場合、迂回の転送アドレスに一致するキューバインディングは要求を作成します。デフォルト値は false です。
    max-hops
    フェデレーション中にメッセージが実行できるホップの最大数。特定のトポロジーでは、このプロパティーに特定の値が必要です。これらの要件の詳細は、「アドレスフェデレーションの一般的なトポロジー」 を参照してください。
    transformer-ref
    トランスフォーマー設定の名前。フェデレーションされたメッセージ送信時にメッセージを変換したい場合は、トランスフォーマー設定を追加することができます。トランスフォーマー設定は、この手順の後半で説明します。
  4. <address-policy> 要素内に、アドレスポリシーからアドレスを追加し、アドレスを除外するためのアドレス一致パターンを追加します。以下に例を示します。

    <federations>
        <federation name="eu-north-1" user="federation_username" password="32a10275cf4ab4e9">
    
            <address-policy name="news-address-federation" auto-delete="true" auto-delete-delay="300000" auto-delete-message-count="-1" enable-divert-bindings="false" max-hops="1" transformer-ref="news-transformer">
    
                <include address-match="queue.bbc.new" />
                <include address-match="queue.usatoday" />
                <include address-match="queue.news.#" />
    
                <exclude address-match="queue.news.sport.#" />
            </address-policy>
    
        </federation>
    </federations>
    include
    この要素の address-match プロパティーの値は、アドレスポリシーに含めるアドレスを指定します。queue.bbc.newqueue.usatoday など、正確なアドレスを指定できます。または、ワイルドカード式を使用して一致するアドレスの セット を指定できます。上記の例では、アドレスポリシーには文字列 queue.news で始まるすべての アドレス名も含まれています
    exclude
    この要素の address-match プロパティーの値は、アドレスポリシーから除外するアドレスを指定します。正確なアドレス名を指定するか、ワイルドカード式を使用して一致するアドレスの セット を指定できます。上記の例では、アドレスポリシーは文字列 queue.news.sport で始まるすべてのアドレス名を除外します。
  5. (任意)federation 要素 では、transformer 要素を追加してカスタムトランスフォーマー実装を参照します。以下に例を示します。

    <federations>
        <federation name="eu-north-1" user="federation_username" password="32a10275cf4ab4e9">
    
            <address-policy name="news-address-federation" auto-delete="true" auto-delete-delay="300000" auto-delete-message-count="-1" enable-divert-bindings="false" max-hops="1" transformer-ref="news-transformer">
    
                <include address-match="queue.bbc.new" />
                <include address-match="queue.usatoday" />
                <include address-match="queue.news.#" />
    
                <exclude address-match="queue.news.sport.#" />
            </address-policy>
    
            <transformer name="news-transformer">
                <class-name>org.myorg.NewsTransformer</class-name>
                <property key="key1" value="value1"/>
                <property key="key2" value="value2"/>
            </transformer>
    
        </federation>
    </federations>
    name
    トランスフォーマー設定の名前。この名前は、ローカルブローカーで一意である必要があります。これは、アドレスポリシーの transformer-ref プロパティーの値として指定する名前です。
    class-name

    org.apache.activemq.artemis.core.server.transformer.Transformer インターフェイスを実装するユーザー定義クラスの名前。

    トランスフォーマーの transform() メソッドは、メッセージが送信される前にメッセージで呼び出されます。これにより、メッセージヘッダーまたはボディーをフェデレーションする前に変換できます。

    プロパティー
    特定のトランスフォーマー設定のキーと値のペアを保持するために使用されます。
  6. federation 要素内に、upstream 要素を 1 つ以上追加します。各 upstream 要素は、リモートブローカーへの接続と、その接続に適用するポリシーを定義します。以下に例を示します。

    <federations>
        <federation name="eu-north-1" user="federation_username" password="32a10275cf4ab4e9">
    
            <upstream name="eu-east-1">
                <static-connectors>
                    <connector-ref>eu-east-connector1</connector-ref>
                </static-connectors>
                <policy ref="news-address-federation"/>
            </upstream>
    
            <upstream name="eu-west-1" >
                <static-connectors>
                    <connector-ref>eu-west-connector1</connector-ref>
                </static-connectors>
                <policy ref="news-address-federation"/>
            </upstream>
    
            <address-policy name="news-address-federation" auto-delete="true" auto-delete-delay="300000" auto-delete-message-count="-1" enable-divert-bindings="false" max-hops="1" transformer-ref="news-transformer">
    
                <include address-match="queue.bbc.new" />
                <include address-match="queue.usatoday" />
                <include address-match="queue.news.#" />
    
                <exclude address-match="queue.news.sport.#" />
            </address-policy>
    
            <transformer name="news-transformer">
                <class-name>org.myorg.NewsTransformer</class-name>
                <property key="key1" value="value1"/>
                <property key="key2" value="value2"/>
            </transformer>
    
        </federation>
    </federations>
    static-connectors
    ローカルブローカーの broker.xml 設定ファイルの他の場所で定義される connector 要素を参照する connector-ref 要素のリストが含まれます。コネクターは、送信接続に使用するトランスポート (TCP、SSL、HTTP など) およびサーバー接続パラメーター (ホスト、ポートなど) を定義します。この手順の次のステップは、static-connectors 要素で参照されるコネクターを追加する方法を示しています。
    policy-ref
    アップストリームブローカーに適用されるダウンストリームブローカーに設定されたアドレスポリシーの名前。

    アップストリーム 要素に指定できる追加オプションを以下に示します。

    name
    アップストリームブローカー設定の名前。この例では、名前は eu-east-1eu-west-1 というアップストリームブローカーに対応します。
    user
    アップストリームブローカーへの接続の作成時に使用するユーザー名。指定のない場合は、federation 要素の設定に指定された共有ユーザー名が使用されます。
    password
    アップストリームブローカーへの接続の作成時に使用するパスワード。指定のない場合は、federation 要素の設定に指定された共有パスワードが使用されます。
    call-failover-timeout
    call-timeout と同様ですが、フェイルオーバーの試行中に呼び出しが行われる場合に使用されます。デフォルト値は -1 で、タイムアウトが無効であることを意味します。
    call-timeout
    ブロック呼び出しであるパケットを送信すると、フェデレーション接続がリモートブローカーからの応答を待つ時間 (ミリ秒単位)。この時間が経過すると、接続によって例外が発生します。デフォルト値は 30000 です。
    check-period
    フェデレーション接続の健常性を確認するために、ローカルブローカがリモートブローカに送信する連続した“keep-alive"メッセージ間の期間 (ミリ秒)。フェデレーション接続が正常である場合、リモートブローカーは各キープアライブメッセージに応答します。接続が正常でないと、ダウンストリームブローカーがアップストリームブローカーから応答を受信できない場合に、サーキットブレーカー と呼ばれるメカニズムを使用してフェデレーションされたコンシューマーをブロックします。詳細は、circuit-breaker-timeout パラメーターの説明を参照してください。check-period パラメーターのデフォルト値は 30000 です。
    circuit-breaker-timeout
    ダウンストリームとアップストリームブローカー間の単一の接続は、多くのフェデレーションされたキューとアドレスコンシューマーによって共有される可能性があります。ブローカー間の接続が失われた場合、フェデレーションされた各コンシューマーは同時に再接続を試みる可能性があります。これを回避するには、サーキットブレーカー と呼ばれるメカニズムはコンシューマーをブロックします。指定したタイムアウト値が経過すると、サーキットブレーカーは接続を再送します。成功すると、コンシューマーはブロックされません。それ以外の場合は、サーキットブレーカーが再度適用されます。
    connection-ttl
    リモートブローカーからのメッセージを受信しなくなった場合に、フェデレーション接続が存続する時間 (ミリ秒単位)。デフォルト値は 60000 です。
    discovery-group-ref
    アップストリームブローカーへの接続に静的コネクターを定義する代わりに、この要素を使用して broker.xml 設定ファイルの別の場所で設定済みの検出グループを指定できます。具体的には、この要素の discovery-group-name プロパティーの値として、既存の検出グループを指定します。検出グループの詳細は、「ブローカー検出メソッド」 を参照してください。
    ha
    アップストリームブローカーへの接続に対して、高可用性が有効であるかどうかを指定します。このパラメーターの値を true に設定すると、ローカルブローカーはアップストリームクラスターで利用可能なブローカーに接続でき、ライブアップストリームブローカーがシャットダウンすると、バックアップブローカーに自動フェイルオーバーされます。デフォルト値は false です。
    initial-connect-attempts
    ダウンストリームブローカーがアップストリームブローカーに接続するようにする初期試行の数。接続を確立せずにこの値に達すると、アップストリームブローカーは永続的にオフラインとみなされます。ダウンストリームブローカーは、メッセージをアップストリームブローカーにルーティングしなくなりました。デフォルト値は -1 で、制限がないことを意味します。
    max-retry-interval
    リモートブローカーへの接続に失敗した場合に後続の再接続試行の間隔 (ミリ秒単位)。デフォルト値は 2000 です。
    reconnect-attempts
    接続が失敗した場合に、ダウンストリームブローカーがアップストリームブローカーへの再接続を試行する回数。接続が再確立されていない状態でこの値に達すると、アップストリームブローカーは永続的にオフラインとみなされます。ダウンストリームブローカーは、メッセージをアップストリームブローカーにルーティングしなくなりました。デフォルト値は -1 で、制限がないことを意味します。
    retry-interval
    リモートブローカーへの接続に失敗した場合に、後続の再接続試行の間隔 (ミリ秒単位)。デフォルト値は 500 です。
    retry-interval-multiplier
    retry-interval パラメーターの値に適用される乗率。デフォルト値は 1 です。
    share-connection
    同じブローカーにダウンストリーム接続とアップストリーム接続の両方が設定されている場合には、ダウンストリーム設定とアップストリーム設定の両方がこのパラメーターの値を true に設定している限り、同じ接続が共有されます。デフォルト値は false です。
  7. ローカルブローカーで、コネクターをリモートブローカーに追加します。これらは、フェデレーションされたアドレス設定の static-connectors 要素で参照されるコネクターです。以下に例を示します。

    <connectors>
       <connector name="eu-west-1-connector">tcp://localhost:61616</connector>
       <connector name="eu-east-1-connector">tcp://localhost:61617</connector>
    </connectors>

4.22.6. ダウンストリームアドレスフェデレーションの設定

以下の例は、スタンドアロンブローカーにダウンストリームアドレスフェデレーションを設定する方法を示しています。

ダウンストリームアドレスのフェデレーションにより、1 つ以上のリモートブローカーがローカルブローカーに接続するために使用するローカルブローカーに設定を追加できます。このアプローチの利点は、すべてのフェデレーション設定を単一のブローカーに維持できることです。これは、たとえば hub-and-spoke トポロジーに役立ちます。

注記

ダウンストリームアドレスのフェデレーションは、フェデレーション接続の方向対アップストリームアドレス設定の方向を逆にします。したがって、リモートブローカーを設定に追加する際に、ダウンストリーム ブローカーとみなされます。ダウンストリームブローカーは、設定の接続情報を使用して、ローカルブローカーに接続し、アップストリームとみなされるようになりました。この例は、この後、リモートブローカーの設定を追加する際に説明します。

前提条件

手順

  1. ローカルブローカーで、<broker_instance_dir>/etc/broker.xml 設定ファイルを開きます。
  2. <federation> 要素が含まれる <federations > 要素を追加します。以下に例を示します。

    <federations>
        <federation name="eu-north-1" user="federation_username" password="32a10275cf4ab4e9">
        </federation>
    </federations>
  3. アドレスポリシー設定を追加します。以下に例を示します。

    <federations>
        ...
        <federation name="eu-north-1" user="federation_username" password="32a10275cf4ab4e9">
    
            <address-policy name="news-address-federation" max-hops="1" auto-delete="true" auto-delete-delay="300000" auto-delete-message-count="-1" transformer-ref="news-transformer">
    
                <include address-match="queue.bbc.new" />
                <include address-match="queue.usatoday" />
                <include address-match="queue.news.#" />
    
                <exclude address-match="queue.news.sport.#" />
            </address-policy>
    
        </federation>
      ...
    </federations>
  4. 送信前にメッセージを変換する場合は、トランスフォーマー設定を追加します。以下に例を示します。

    <federations>
        ...
        <federation name="eu-north-1" user="federation_username" password="32a10275cf4ab4e9">
    
            <address-policy name="news-address-federation" max-hops="1" auto-delete="true" auto-delete-delay="300000" auto-delete-message-count="-1" transformer-ref="news-transformer">
    
                <include address-match="queue.bbc.new" />
                <include address-match="queue.usatoday" />
                <include address-match="queue.news.#" />
    
                <exclude address-match="queue.news.sport.#" />
            </address-policy>
    
            <transformer name="news-transformer">
                <class-name>org.myorg.NewsTransformer</class-name>
                <property key="key1" value="value1"/>
                <property key="key2" value="value2"/>
            </transformer>
    
        </federation>
      ...
    </federations>
  5. 各リモートブローカーに ダウンストリーム 要素を追加します。以下に例を示します。

    <federations>
        ...
        <federation name="eu-north-1" user="federation_username" password="32a10275cf4ab4e9">
    
            <downstream name="eu-east-1">
                    <static-connectors>
                        <connector-ref>eu-east-connector1</connector-ref>
                    </static-connectors>
                    <upstream-connector-ref>netty-connector</upstream-connector-ref>
                    <policy ref="news-address-federation"/>
            </downstream>
    
            <downstream name="eu-west-1" >
                    <static-connectors>
                        <connector-ref>eu-west-connector1</connector-ref>
                    </static-connectors>
                    <upstream-connector-ref>netty-connector</upstream-connector-ref>
                    <policy ref="news-address-federation"/>
            </downstream>
    
            <address-policy name="news-address-federation" max-hops="1" auto-delete="true" auto-delete-delay="300000" auto-delete-message-count="-1" transformer-ref="news-transformer">
                <include address-match="queue.bbc.new" />
                <include address-match="queue.usatoday" />
                <include address-match="queue.news.#" />
    
                <exclude address-match="queue.news.sport.#" />
            </address-policy>
    
            <transformer name="news-transformer">
                <class-name>org.myorg.NewsTransformer</class-name>
                <property key="key1" value="value1"/>
                <property key="key2" value="value2"/>
            </transformer>
    
        </federation>
      ...
    </federations>

    上記の設定で示されているように、リモートブローカーはローカルブローカーのダウンストリームであると見なされます。ダウンストリームブローカーは、設定の接続情報を使用して、ローカル (アップストリーム) ブローカーへ再度接続します。

  6. ローカルブローカーで、ローカルブローカーおよびリモートブローカーによって使用されるコネクターとアクセプターを追加して、フェデレーション接続を確立します。以下に例を示します。

    <connectors>
       <connector name="netty-connector">tcp://localhost:61616</connector>
       <connector name="eu-west-1-connector">tcp://localhost:61616</connector>
       <connector name="eu-east-1-connector">tcp://localhost:61617</connector>
    </connectors>
    
    <acceptors>
       <acceptor name="netty-acceptor">tcp://localhost:61616</acceptor>
    </acceptors>
    connector name="netty-connector"
    ローカルブローカーがリモートブローカーに送信するコネクター設定。リモートブローカーはこの設定を使用してローカルブローカーに接続し直します。
    connector name="eu-west-1-connector", connector name="eu-east-1-connector"
    リモートブローカーへのコネクター。ローカルブローカーはこれらのコネクターを使用してリモートブローカーに接続し、リモートブローカーがローカルブローカーに接続するために必要な設定を共有します。
    acceptor name="netty-acceptor"
    ローカルブローカーに接続するためにリモートブローカーによって使用されるコネクターに対応するローカルブローカーのアクセプター。

4.22.7. キューフェデレーションについて

キューフェデレーションは、他のリモートブローカー全体でローカルブローカーの単一キューの負荷を分散する方法を提供します。

負荷分散を実現するため、ローカルブローカーはローカルコンシューマーからのメッセージの要求を満たすために、リモートキューからメッセージを取得します。以下に例を示します。

図4.5 対称キューフェデレーション

対称キューフェデレーション

リモートキューを再設定する必要はありません。同じブローカーまたは同じクラスター内に配置する必要はありません。リモートリンクおよびフェデレーションされたキューの作成に必要なすべての設定はローカルブローカーにあります。

4.22.7.1. キューフェデレーションの利点

以下は、キューのフェデレーションの設定を選択する理由です。

容量の増加
キューフェデレーションは、多くのブローカーに分散される論理キューを作成できます。この論理分散キューは、単一のブローカーにある 1 つのキューよりもはるかに高い容量を持ちます。この設定では、最初に公開されていたブローカーから消費できるメッセージがいくつでも消費されます。システムは、負荷分散が必要な場合にのみ、フェデレーション中のメッセージを移動します。
マルチリージョン設定のデプロイ

マルチリージョン設定では、メッセージプロデューサーが 1 つのリージョンまたは venue にあり、コンシューマーが別のリージョンにある可能性があります。ただし、プロデューサーとコンシューマー接続を指定のリージョンに対してローカルに維持することが理想的です。この場合、プロデューサーとコンシューマーが存在する各リージョンにブローカーをデプロイし、キューフェデレーションを使用して、リージョン間での Wide Area Network(WAN) でメッセージを移動できます。以下に例を示します。

図4.6 マルチリージョンキューフェデレーション

マルチリージョンキューフェデレーション
安全なエンタープライズ LAN と DMZ 間の通信

ネットワークセキュリティーでは、demilitarized zone (DMZ) は物理または論理のサブネットワークで、企業の外部向けサービスを含み、信頼できない外部向けのサービス (通常はインターネットなど、信頼されていない、より大規模なネットワーク) に公開します。その他の企業のローカルエリアネットワーク (LAN) は、ファイアウォールの背後でこの外部ネットワークから分離されます。

セキュアなエンタープライズ LAN の多くのメッセージプロデューサーが DMZ と多数のコンシューマーにある場合、プロデューサーが安全なエンタープライズ LAN のブローカーに接続できないことがあります。この場合、プロデューサーがメッセージを公開できる DMZ にブローカーをデプロイできます。その後、エンタープライズ LAN のブローカーは DMZ のブローカーに接続し、フェデレーションされたキューを使用して DMZ のブローカーからメッセージを受信します。

4.22.8. アップストリームキューフェデレーションの設定

以下の例は、スタンドアロンブローカーにアップストリームのキューフェデレーションを設定する方法を示しています。この例では、ローカル (つまりダウンストリーム) ブローカーから一部のリモート (つまりアップストリーム) ブローカーへのフェデレーションを設定します。

前提条件

  • 以下の例は、スタンドアロンブローカー間でキューフェデレーションを設定する方法を示しています。ただし、ブローカー クラスター のフェデレーションを設定するための要件も理解している必要があります。詳細は、「ブローカークラスターのフェデレーションの設定」 を参照してください。

手順

  1. <broker_instance_dir>/etc/broker.xml 設定ファイルを開きます。
  2. 新しい <federations> 要素に、<federation> 要素を追加します。以下に例を示します。

    <federations>
      <federation name="eu-north-1" user="federation_username" password="32a10275cf4ab4e9">
      </federation>
    </federations>
    name
    フェデレーション設定の名前。この例では、名前はダウンストリームブローカーの名前に対応します。
    user
    アップストリームブローカーに接続するための共有ユーザー名。
    password
    アップストリームブローカーに接続するための共有パスワード。
    注記
    • ユーザーとパスワードの認証情報がアップストリームブローカーごとに異なる場合は、設定に追加する時にこれらのブローカーの認証情報を個別に指定できます。これは、この手順の後半で説明します。
  3. federation 要素内に <queue-policy> 要素を追加します。<queue-policy> 要素のプロパティー値を指定します。以下に例を示します。

    <federations>
        <federation name="eu-north-1" user="federation_username" password="32a10275cf4ab4e9">
    
            <queue-policy name="news-queue-federation" include-federated="true" priority-adjustment="-5" transformer-ref="news-transformer">
            </queue-policy>
    
        </federation>
    </federations>
    name
    キューポリシーの名前。ブローカーに設定されるキューポリシーはすべて一意の名前である必要があります。
    include-federated

    このプロパティーの値を false に設定すると、設定は、すでにフェデレーションされたコンシューマー (つまりフェデレーションされたキューのコンシューマー) は統合しなおされません。これにより、対称または閉ループトポロジーで、フェデレーションされていないコンシューマーが存在せず、メッセージがシステム内を無限に流れる状況を回避できます。

    閉ループトポロジーが ない 場合は、このプロパティーの値を true に設定できます。たとえば、3 つのブローカー、BrokerABrokerB、および BrokerC のチェーンがあり、プロデューサーが BrokerA のコンシューマーと BrokerC のコンシューマーがあるとします。この場合、BrokerB コンシューマーを BrokerA にフェデレーションしなおす必要があります。

    priority-adjustment
    コンシューマーがキューに接続すると、その優先度は、アップストリーム (フェデレーションされた) コンシューマーの作成時に優先順位が使用されます。フェデレーションされたコンシューマーの優先度は、priority-adjustment プロパティーの値で調整します。このプロパティーのデフォルト値は -1 です。これにより、負荷分散時にローカルコンシューマーがフェデレーションされたコンシューマーよりも優先されます。ただし、必要に応じて優先順位の調整の値を変更できます。
注記

ローカルコンシューマーに優先順位が与えられているにもかかわらず、フェでレーテッドコンシューマーが、フェデレーションコンシューマーに移動するメッセージが多すぎる速度でメッセージを消費する場合は、フェデレーテッドコンシューマーがメッセージを消費する速度を制限できます。メッセージ消費のレートを制限するには、フェデレーションコンシューマーのクライアント接続 URI で ConsumerMaxRate フロー制御オプションを設定します。詳細は、AMQ コアプロトコル JMS クライアント ドキュメントに記載のフロー制御オプションを参照してください。

transformer-ref

トランスフォーマー設定の名前。フェデレーションされたメッセージ送信時にメッセージを変換したい場合は、トランスフォーマー設定を追加することができます。トランスフォーマー設定は、この手順の後半で説明します。

  1. <queue-policy> 要素内に、キューポリシーからアドレスを追加し、除外する address-matching パターンを追加します。以下に例を示します。

    <federations>
        <federation name="eu-north-1" user="federation_username" password="32a10275cf4ab4e9">
    
            <queue-policy name="news-queue-federation" include-federated="true" priority-adjustment="-5" transformer-ref="news-transformer">
    
                <include queue-match="#" address-match="queue.bbc.new" />
                <include queue-match="#" address-match="queue.usatoday" />
                <include queue-match="#" address-match="queue.news.#" />
    
                <exclude queue-match="#.local" address-match="#" />
    
            </queue-policy>
    
        </federation>
    </federations>
include

この要素の address-match プロパティーの値は、キューポリシーに含めるアドレスを指定します。queue.bbc.newqueue.usatoday など、正確なアドレスを指定できます。または、ワイルドカード式を使用して一致するアドレスの セット を指定できます。上記の例では、アドレスポリシーには文字列 queue.news で始まるすべてのアドレス名も含まれています。

address-match プロパティーと組み合わせて、queue-match プロパティーを使用して、キューポリシーにこれらのアドレスに特定のキューを含めることができます。address-match プロパティーと同様に、正確なキュー名を指定するか、ワイルドカード式を使用して一連のキューを指定できます。上記の例では、番号記号 (#) のワイルドカード文字は、各アドレスまたはアドレスセットにある すべて のキューがキューポリシーに含まれることを示しています。

exclude

この要素の address-match プロパティーの値は、キューポリシーから除外するアドレスを指定します。正確なアドレスを指定するか、ワイルドカード式を使用して一致するアドレスの セット を指定できます。上記の例では、数字記号 (#) ワイルドカード文字は、 アドレスの queue-match プロパティーと一致するキューがすべて除外されることを意味します。この場合、.local という文字列で終了するキューは除外されます。これは、特定のキューがローカルキューとして保持され、フェデレーションされていないことを示しています。

  1. federation 要素 では、transformer 要素を追加してカスタムトランスフォーマー実装を参照します。以下に例を示します。

    <federations>
        <federation name="eu-north-1" user="federation_username" password="32a10275cf4ab4e9">
    
            <queue-policy name="news-queue-federation" include-federated="true" priority-adjustment="-5" transformer-ref="news-transformer">
    
                <include queue-match="#" address-match="queue.bbc.new" />
                <include queue-match="#" address-match="queue.usatoday" />
                <include queue-match="#" address-match="queue.news.#" />
    
                <exclude queue-match="#.local" address-match="#" />
    
            </queue-policy>
    
            <transformer name="news-transformer">
                <class-name>org.myorg.NewsTransformer</class-name>
                <property key="key1" value="value1"/>
                <property key="key2" value="value2"/>
            </transformer>
    
        </federation>
    </federations>
name
トランスフォーマー設定の名前。この名前は、対象となるブローカーで一意でなければなりません。この名前は、アドレスポリシーの transformer-ref プロパティーの値として指定します。
class-name

org.apache.activemq.artemis.core.server.transformer.Transformer インターフェイスを実装するユーザー定義クラスの名前。

トランスフォーマーの transform() メソッドは、メッセージが送信される前にメッセージで呼び出されます。これにより、メッセージヘッダーまたはボディーをフェデレーションする前に変換できます。

プロパティー

特定のトランスフォーマー設定のキーと値のペアを保持するために使用されます。

  1. federation 要素内に、upstream 要素を 1 つ以上追加します。各 upstream 要素は、アップストリームブローカー接続と、その接続に適用するポリシーを定義します。以下に例を示します。

    <federations>
        <federation name="eu-north-1" user="federation_username" password="32a10275cf4ab4e9">
    
            <upstream name="eu-east-1">
                <static-connectors>
                    <connector-ref>eu-east-connector1</connector-ref>
                </static-connectors>
                <policy ref="news-queue-federation"/>
            </upstream>
    
            <upstream name="eu-west-1" >
                <static-connectors>
                    <connector-ref>eu-west-connector1</connector-ref>
                </static-connectors>
                <policy ref="news-queue-federation"/>
            </upstream>
    
            <queue-policy name="news-queue-federation" include-federated="true" priority-adjustment="-5" transformer-ref="news-transformer">
    
                <include queue-match="#" address-match="queue.bbc.new" />
                <include queue-match="#" address-match="queue.usatoday" />
                <include queue-match="#" address-match="queue.news.#" />
    
                <exclude queue-match="#.local" address-match="#" />
    
            </queue-policy>
    
            <transformer name="news-transformer">
                <class-name>org.myorg.NewsTransformer</class-name>
                <property key="key1" value="value1"/>
                <property key="key2" value="value2"/>
            </transformer>
    
        </federation>
    </federations>
    static-connectors
    ローカルブローカーの broker.xml 設定ファイルの他の場所で定義される connector 要素を参照する connector-ref 要素のリストが含まれます。コネクターは、送信接続に使用するトランスポート (TCP、SSL、HTTP など) およびサーバー接続パラメーター (ホスト、ポートなど) を定義します。以下の手順は、フェデレーションされたキュー設定の static-connectors 要素で参照されるコネクターを追加する方法を示しています。
    policy-ref
    アップストリームブローカーに適用されるダウンストリームブローカーに設定されたキューポリシーの名前。

    アップストリーム 要素に指定できる追加オプションを以下に示します。

name
アップストリームブローカー設定の名前。この例では、名前は eu-east-1eu-west-1 というアップストリームブローカーに対応します。
user
アップストリームブローカーへの接続の作成時に使用するユーザー名。指定のない場合は、federation 要素の設定に指定された共有ユーザー名が使用されます。
password
アップストリームブローカーへの接続の作成時に使用するパスワード。指定のない場合は、federation 要素の設定に指定された共有パスワードが使用されます。
call-failover-timeout
call-timeout と同様ですが、フェイルオーバーの試行中に呼び出しが行われる場合に使用されます。デフォルト値は -1 で、タイムアウトが無効であることを意味します。
call-timeout
ブロック呼び出しであるパケットを送信すると、フェデレーション接続がリモートブローカーからの応答を待つ時間 (ミリ秒単位)。この時間が経過すると、接続によって例外が発生します。デフォルト値は 30000 です。
check-period
フェデレーション接続の健常性を確認するために、ローカルブローカがリモートブローカに送信する連続した“keep-alive"メッセージ間の期間 (ミリ秒)。フェデレーション接続が正常である場合、リモートブローカーは各キープアライブメッセージに応答します。接続が正常でないと、ダウンストリームブローカーがアップストリームブローカーから応答を受信できない場合に、サーキットブレーカー と呼ばれるメカニズムを使用してフェデレーションされたコンシューマーをブロックします。詳細は、circuit-breaker-timeout パラメーターの説明を参照してください。check-period パラメーターのデフォルト値は 30000 です。
circuit-breaker-timeout
ダウンストリームとアップストリームブローカー間の単一の接続は、多くのフェデレーションされたキューとアドレスコンシューマーによって共有される可能性があります。ブローカー間の接続が失われた場合、フェデレーションされた各コンシューマーは同時に再接続を試みる可能性があります。これを回避するには、サーキットブレーカー と呼ばれるメカニズムはコンシューマーをブロックします。指定したタイムアウト値が経過すると、サーキットブレーカーは接続を再送します。成功すると、コンシューマーはブロックされません。それ以外の場合は、サーキットブレーカーが再度適用されます。
connection-ttl
リモートブローカーからのメッセージを受信しなくなった場合に、フェデレーション接続が存続する時間 (ミリ秒単位)。デフォルト値は 60000 です。
discovery-group-ref
アップストリームブローカーへの接続に静的コネクターを定義する代わりに、この要素を使用して broker.xml 設定ファイルの別の場所で設定済みの検出グループを指定できます。具体的には、この要素の discovery-group-name プロパティーの値として、既存の検出グループを指定します。検出グループの詳細は、「ブローカー検出メソッド」 を参照してください。
ha
アップストリームブローカーへの接続に対して、高可用性が有効であるかどうかを指定します。このパラメーターの値を true に設定すると、ローカルブローカーはアップストリームクラスターで利用可能なブローカーに接続でき、ライブアップストリームブローカーがシャットダウンすると、バックアップブローカーに自動フェイルオーバーされます。デフォルト値は false です。
initial-connect-attempts
ダウンストリームブローカーがアップストリームブローカーに接続するようにする初期試行の数。接続を確立せずにこの値に達すると、アップストリームブローカーは永続的にオフラインとみなされます。ダウンストリームブローカーは、メッセージをアップストリームブローカーにルーティングしなくなりました。デフォルト値は -1 で、制限がないことを意味します。
max-retry-interval
リモートブローカーへの接続に失敗した場合に後続の再接続試行の間隔 (ミリ秒単位)。デフォルト値は 2000 です。
reconnect-attempts
接続が失敗した場合に、ダウンストリームブローカーがアップストリームブローカーへの再接続を試行する回数。接続が再確立されていない状態でこの値に達すると、アップストリームブローカーは永続的にオフラインとみなされます。ダウンストリームブローカーは、メッセージをアップストリームブローカーにルーティングしなくなりました。デフォルト値は -1 で、制限がないことを意味します。
retry-interval
リモートブローカーへの接続に失敗した場合に、後続の再接続試行の間隔 (ミリ秒単位)。デフォルト値は 500 です。
retry-interval-multiplier
retry-interval パラメーターの値に適用される乗率。デフォルト値は 1 です。
share-connection

同じブローカーにダウンストリーム接続とアップストリーム接続の両方が設定されている場合には、ダウンストリーム設定とアップストリーム設定の両方がこのパラメーターの値を true に設定している限り、同じ接続が共有されます。デフォルト値は false です。

  1. ローカルブローカーで、コネクターをリモートブローカーに追加します。これらは、フェデレーションされたアドレス設定の static-connectors 要素で参照されるコネクターです。以下に例を示します。

    <connectors>
       <connector name="eu-west-1-connector">tcp://localhost:61616</connector>
       <connector name="eu-east-1-connector">tcp://localhost:61617</connector>
    </connectors>

4.22.9. ダウンストリームキューフェデレーションの設定

以下の例は、ダウンストリームキューフェデレーションを設定する方法を示しています。

ダウンストリームキューのフェデレーションにより、1 つ以上のリモートブローカーがローカルブローカーに接続するために使用するローカルブローカーに設定を追加できます。このアプローチの利点は、すべてのフェデレーション設定を単一のブローカーに維持できることです。これは、たとえば hub-and-spoke トポロジーに役立ちます。

注記

ダウンストリームキューのフェデレーションは、フェデレーション接続の方向対アップストリームキュー設定の方向を逆にします。したがって、リモートブローカーを設定に追加する際に、ダウンストリーム ブローカーとみなされます。ダウンストリームブローカーは、設定の接続情報を使用して、ローカルブローカーに接続し、アップストリームとみなされるようになりました。この例は、この後、リモートブローカーの設定を追加する際に説明します。

前提条件

手順

  1. <broker_instance_dir>/etc/broker.xml 設定ファイルを開きます。
  2. <federation> 要素が含まれる <federations > 要素を追加します。以下に例を示します。

    <federations>
      <federation name="eu-north-1" user="federation_username" password="32a10275cf4ab4e9">
      </federation>
    </federations>
  3. キューポリシー設定を追加します。以下に例を示します。

    <federations>
        ...
        <federation name="eu-north-1" user="federation_username" password="32a10275cf4ab4e9">
    
            <queue-policy name="news-queue-federation" priority-adjustment="-5" include-federated="true" transformer-ref="new-transformer">
    
                <include queue-match="#" address-match="queue.bbc.new" />
                <include queue-match="#" address-match="queue.usatoday" />
                <include queue-match="#" address-match="queue.news.#" />
    
                <exclude queue-match="#.local" address-match="#" />
    
            </queue-policy>
    
        </federation>
      ...
    </federations>
  4. 送信前にメッセージを変換する場合は、トランスフォーマー設定を追加します。以下に例を示します。

    <federations>
        ...
        <federation name="eu-north-1" user="federation_username" password="32a10275cf4ab4e9">
    
            <queue-policy name="news-queue-federation" priority-adjustment="-5" include-federated="true" transformer-ref="news-transformer">
    
                <include queue-match="#" address-match="queue.bbc.new" />
                <include queue-match="#" address-match="queue.usatoday" />
                <include queue-match="#" address-match="queue.news.#" />
    
                <exclude queue-match="#.local" address-match="#" />
    
            </queue-policy>
    
            <transformer name="news-transformer">
                <class-name>org.myorg.NewsTransformer</class-name>
                <property key="key1" value="value1"/>
                <property key="key2" value="value2"/>
            </transformer>
    
        </federation>
      ...
    </federations>
  5. 各リモートブローカーに ダウンストリーム 要素を追加します。以下に例を示します。

    <federations>
        ...
        <federation name="eu-north-1" user="federation_username" password="32a10275cf4ab4e9">
    
            <downstream name="eu-east-1">
                <static-connectors>
                    <connector-ref>eu-east-connector1</connector-ref>
                </static-connectors>
                <upstream-connector-ref>netty-connector</upstream-connector-ref>
                <policy ref="news-address-federation"/>
            </downstream>
    
            <downstream name="eu-west-1" >
                <static-connectors>
                    <connector-ref>eu-west-connector1</connector-ref>
                </static-connectors>
                <upstream-connector-ref>netty-connector</upstream-connector-ref>
                <policy ref="news-address-federation"/>
            </downstream>
    
            <queue-policy name="news-queue-federation" priority-adjustment="-5" include-federated="true" transformer-ref="new-transformer">
    
                <include queue-match="#" address-match="queue.bbc.new" />
                <include queue-match="#" address-match="queue.usatoday" />
                <include queue-match="#" address-match="queue.news.#" />
    
                <exclude queue-match="#.local" address-match="#" />
    
            </queue-policy>
    
            <transformer name="news-transformer">
                <class-name>org.myorg.NewsTransformer</class-name>
                <property key="key1" value="value1"/>
                <property key="key2" value="value2"/>
            </transformer>
    
        </federation>
      ...
    </federations>

    上記の設定で示されているように、リモートブローカーはローカルブローカーのダウンストリームであると見なされます。ダウンストリームブローカーは、設定の接続情報を使用して、ローカル (アップストリーム) ブローカーへ再度接続します。

  6. ローカルブローカーで、ローカルブローカーおよびリモートブローカーによって使用されるコネクターとアクセプターを追加して、フェデレーション接続を確立します。以下に例を示します。

    <connectors>
       <connector name="netty-connector">tcp://localhost:61616</connector>
       <connector name="eu-west-1-connector">tcp://localhost:61616</connector>
       <connector name="eu-east-1-connector">tcp://localhost:61617</connector>
    </connectors>
    
    <acceptors>
       <acceptor name="netty-acceptor">tcp://localhost:61616</acceptor>
    </acceptors>
    connector name="netty-connector"
    ローカルブローカーがリモートブローカーに送信するコネクター設定。リモートブローカーはこの設定を使用してローカルブローカーに接続し直します。
    connector name="eu-west-1-connector" , connector name="eu-east-1-connector"
    リモートブローカーへのコネクター。ローカルブローカーはこれらのコネクターを使用してリモートブローカーに接続し、リモートブローカーがローカルブローカーに接続するために必要な設定を共有します。
    acceptor name="netty-acceptor"
    ローカルブローカーに接続するためにリモートブローカーによって使用されるコネクターに対応するローカルブローカーのアクセプター。
Red Hat logoGithubRedditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

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

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

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

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

会社概要

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

© 2024 Red Hat, Inc.