第4章 Operator ベースのブローカーデプロイメントの設定

4.1. Operator ベースのブローカーデプロイメントのアドレスおよびキューの設定

Operator ベースのブローカーのデプロイメントの場合、2 つの異なるカスタムリソース (CR) インスタンスを使用してアドレスおよびキューと関連する設定を行います。

  • ブローカーでアドレスおよびキューを作成するには、アドレスカスタムリソース定義 (CRD) に基づいて CR インスタンスをデプロイします。

    • OpenShift コマンドラインインターフェイス (CLI) を使用して Operator をインストールした場合、アドレス CRD は、ダウンロードした Operator インストールアーカイブの deploy/crds に含まれている broker_activemqartemisaddress_crd.yaml ファイルです。
    • OperatorHub を使用して Operator をインストールした場合、アドレス CRD は OpenShift Container Platform Web コンソールのAdministrationCustom Resource Definitions に一覧表示されている ActiveMQAretmisAddress CRD になります。
  • 特定のアドレスに一致するアドレスおよびキュー設定を設定するには、ブローカーデプロイメントの作成に使用されるメインのカスタムリソース (CR) インスタンスに設定を含めます。

    • OpenShift CLI を使用して Operator をインストールした場合、メインのブローカー CRD は、ダウンロードした Operator インストールアーカイブの deploy/crds に含まれる broker_activemqartemis_crd.yaml ファイルです。
    • OperatorHub を使用して Operator をインストールした場合、メインブローカー CRD は OpenShift Container Platform Web コンソールのAdministrationCustom Resource Definitions に一覧表示されている ActiveMQAretmis CRD になります。
    重要
    • Operator ベースのデプロイメントのアドレス設定を設定するには、AMQ Broker 7.7 の Operator の最新バージョン (バージョン 0.17) を使用する必要があります。Operator を最新バージョンにアップグレードする方法については、5章Operator ベースのブローカーデプロイメントのアップグレード を参照してください。
    • AMQ Broker 7.7 では、CR を初めてデプロイする に、メインブローカーの CR インスタンスにアドレス設定を追加する必要があります。すでに実行中のブローカーデプロイメントに設定を追加できません

    通常、OpenShift Container Platform でのブローカーデプロイメントに設定できるアドレスおよびキュー設定は、Linux または Windows のスタンドアロンブローカーデプロイメントのいずれでも完全に同等です。ただし、これらの設定についての違いに注意してください。これらの違いは、以下のサブセクションで説明します。

4.1.1. OpenShift とスタンドアロンブローカーデプロイメント間のアドレスおよびキュー設定の相違点

  • OpenShift Container Platform のブローカーデプロイメントのアドレスおよびキュー設定を設定するには、ブローカーデプロイメントのメインカスタムリソース (CR) インスタンスの addressSettings セクションに設定を追加します。これは、Linux または Windows のスタンドアロンデプロイメントとは対照的で、broker.xml 設定ファイルの address-settings 要素に設定を追加します。
  • 設定項目の名前に使用される形式は、OpenShift Container Platform とスタンドアロンブローカーデプロイメントとは異なります。OpenShift Container Platform デプロイメントでは、設定アイテム名は camel ケースに置かれます (例: defaultQueueRoutingType)。一方、スタンドアロンデプロイメントの設定項目名は小文字にあり、dash (-) セパレーターを使用します (例: default-queue-routing-type)。

    以下の表は、この命名に関する他の例を紹介します。

    スタンドアロンブローカーデプロイメントの設定アイテムOpenShift ブローカーデプロイメントの設定アイテム

    address-full-policy

    addressFullPolicy

    auto-create-queues

    autoCreateQueues

    default-queue-routing-type

    defaultQueueRoutingType

    last-value-queue

    lastValueQueue

関連情報

4.1.2. Operator ベースのブローカーデプロイメントのアドレスおよびキューの作成

以下の手順では、カスタムリソース (CR) インスタンスを使用してアドレスおよび関連付けられたキューを Operator ベースのブローカーデプロイメントに追加する方法を説明します。

注記

ブローカーデプロイメントに複数のアドレスやキューを作成するには、個別の CR ファイルを作成してそれらを個別にデプロイし、それぞれのケースに新しいアドレスやキュー名を指定する必要があります。さらに、各 CR インスタンスの name 属性は一意である必要があります。

前提条件

手順

  1. カスタムリソース (CR) インスタンスの設定を開始し、ブローカーデプロイメントのアドレスおよびキューを定義します。

    1. OpenShift コマンドラインインターフェイスの使用:

      1. ブローカーのデプロイメントを含むプロジェクトの管理者権限で OpenShift にログインします。

        oc login -u <user> -p <password> --server=<host:port>
      2. ダウンロードした Operator インストールアーカイブの deploy/crs ディレクトリーに含まれる broker_activemqartemisaddress_cr.yaml というサンプル CR ファイルを開きます。
    2. OpenShift Container Platform Web コンソールの使用

      1. ブローカーのデプロイメントを含むプロジェクトの管理者権限でコンソールにログインします。
      2. アドレス CRD に基づいて新規 CR インスタンスを起動します。左側のペインで、AdministrationCustom Resource Definitions をクリックします。
      3. ActiveMQArtemisAddresss CRD をクリックします。
      4. Instances タブをクリックします。
      5. Create ActiveMQArtemisAddress をクリックします。

        コンソールで、YAML エディターが開き、CR インスタンスを設定できます。

  2. CR の spec セクションで、行を追加してアドレス、キュー、およびルーティングタイプを定義します。以下に例を示します。

    apiVersion: broker.amq.io/v2alpha2
    kind: ActiveMQArtemisAddress
    metadata:
        name: myAddressDeployment0
        namespace: myProject
    spec:
        ...
        addressName: myAddress0
        queueName: myQueue0
        routingType: anycast
        ...

    上記の設定では、myQueue0 という名前のキューと anycast ルーティングタイプを持つ myAddress0 という名前のアドレスが定義されます。

    注記

    metadata セクションで、namespace プロパティーを追加し、OpenShift Container Platform Web コンソールを使用して CR インスタンスを作成する場合にのみ値を指定する必要があります。指定する値は、ブローカーデプロイメントの OpenShift プロジェクトの名前です。

  3. CR インスタンスをデプロイします。

    1. OpenShift コマンドラインインターフェイスの使用:

      1. CR ファイルを保存します。
      2. ブローカーのデプロイメントが含まれるプロジェクトに切り替えます。

        $ oc project <project-name>
      3. CR を作成します。

        $ oc create -f <path/to/address-custom-resource-instance>.yaml
    2. OpenShift Web コンソールの使用

      1. CR の設定が完了したら、Create をクリックします。
  4. (オプション) CR インスタンスを使用して以前にデプロイメントに追加されたアドレスおよびキューを削除するには、以下のコマンドを使用します。

    $ oc delete -f <path/to/address-custom-resource-instance>.yaml

4.1.3. Operator ベースのブローカーデプロイメントで設定されたアドレスへのマッチングアドレス設定

クライアントにメッセージの配信に失敗した場合は、ブローカーがメッセージの配信を継続しようとしない場合があります。無限配信を試行するのを防ぐために、デッドレターアドレスと関連するデッドレターキューを定義できます。指定の数の配信試行後、ブローカーは元のキューから未配信メッセージを削除し、そのメッセージを設定済みのデッドレターアドレスに送信します。システム管理者は、デッド文字キューから未配信メッセージを後で消費してメッセージを検査できます。

以下の例は、Operator ベースのブローカーデプロイメントのデッドレターアドレスおよびキューを設定する方法を示しています。この例では、メインブローカーのカスタムリソース (CR) インスタンスの addressSetting セクションを使用してアドレス設定を指定し、それらの設定をブローカーデプロイのアドレスと同じものにする方法を示します。

重要

CR を初めてデプロイする 前に、ブローカデプロイのメイン CR インスタンスにアドレス設定を追加する必要があります。アドレス設定を、すでに実行中のブローカーデプロイメントに追加 できません

前提条件

手順

  1. CR インスタンスを設定して、デッドレターアドレスとキューを追加して、デプロイメント内の各ブローカーの配信されていないメッセージを受信します。

    1. OpenShift コマンドラインインターフェイスの使用:

      1. ブローカーのデプロイメントを含むプロジェクトの管理者権限で OpenShift にログインします。

        oc login -u <user> -p <password> --server=<host:port>
      2. ダウンロードした Operator インストールアーカイブの deploy/crs ディレクトリーに含まれる broker_activemqartemisaddress_cr.yaml というサンプル CR ファイルを開きます。
    2. OpenShift Container Platform Web コンソールの使用

      1. ブローカーのデプロイメントを含むプロジェクトの管理者権限でコンソールにログインします。
      2. アドレス CRD に基づいて新規 CR インスタンスを起動します。左側のペインで、AdministrationCustom Resource Definitions をクリックします。
      3. ActiveMQArtemisAddresss CRD をクリックします。
      4. Instances タブをクリックします。
      5. Create ActiveMQArtemisAddress をクリックします。

        コンソールで、YAML エディターが開き、CR インスタンスを設定できます。

  2. CR の spec セクションで、未配信のメッセージを受信するデッドレターアドレスおよびキューを指定する行を追加します。以下に例を示します。

    apiVersion: broker.amq.io/v2alpha2
    kind: ActiveMQArtemisAddress
    metadata:
        name: ex-aaoaddress
    spec:
        ...
        addressName: myDeadLetterAddress
        queueName: myDeadLetterQueue
        routingType: anycast
        ...

    上記の設定では、myDeadLetterQueue という名前のデッドレターキューと anycast ルーティングタイプを持つ myDeadLetterAddress という名前のデッドレターアドレスを定義します。

    注記

    metadata セクションで、namespace プロパティーを追加し、OpenShift Container Platform Web コンソールを使用して CR インスタンスを作成する場合にのみ値を指定する必要があります。指定する値は、ブローカーデプロイメントの OpenShift プロジェクトの名前です。

  3. アドレス CR インスタンスをデプロイします。

    1. OpenShift コマンドラインインターフェイスの使用:

      1. CR ファイルを保存します。
      2. ブローカーデプロイメントのプロジェクトに切り替えます。

        $ oc project <project-name>
      3. アドレス CR を作成します。

        $ oc create -f <path/to/address-custom-resource-instance>.yaml
    2. OpenShift Web コンソールの使用

      1. CR の設定が完了したら、Create をクリックします。
  4. ブローカーデプロイメントのカスタムリソース (CR) インスタンスの設定を開始します。

    1. CR ファイルのサンプルの場合:

      1. ダウンロードした Operator インストールアーカイブの deploy/crs ディレクトリーに含まれる broker_activemqartemis_cr.yaml というサンプル CR ファイルを開きます。
    2. OpenShift Container Platform Web コンソールの使用

      1. メインブローカー CRD に基づいて新規 CR インスタンスを起動します。左側のペインで、AdministrationCustom Resource Definitions をクリックします。
      2. ActiveMQArtemis CRD をクリックします。
      3. Instances タブをクリックします。
      4. Create ActiveMQArtemis をクリックします。

        コンソールで、YAML エディターが開き、CR インスタンスを設定できます。

    基本的なブローカーデプロイメントの場合、設定が以下のように表示される可能性があります。

    apiVersion: broker.amq.io/v2alpha3
    kind: ActiveMQArtemis
    metadata:
      name: ex-aao
      application: ex-aao-app
    spec:
        version: 7.7.0
        deploymentPlan:
            size: 3
            image: registry.redhat.io/amq7/amq-broker:7.7
            requireLogin: false
            persistenceEnabled: true
            journalType: nio
            messageMigration: true
    注記

    metadata セクションで、namespace プロパティーを追加し、OpenShift Container Platform Web コンソールを使用して CR インスタンスを作成する場合にのみ値を指定する必要があります。指定する値は、ブローカーデプロイメントの OpenShift プロジェクトの名前です。

  5. CR の deploymentPlan セクションで、以下に示すように単一の addressSetting セクションが含まれる新規 addressSettings セクションを追加します。

    spec:
        version: 7.7.0
        deploymentPlan:
            size: 3
            image: registry.redhat.io/amq7/amq-broker:7.7
            requireLogin: false
            persistenceEnabled: true
            journalType: nio
            messageMigration: true
            addressSettings:
                addressSetting:
  6. addressSetting ブロックに match プロパティーのインスタンスを 1 つ追加します。アドレス一致式を指定します。以下に例を示します。

    spec:
        version: 7.7.0
        deploymentPlan:
            size: 3
            image: registry.redhat.io/amq7/amq-broker:7.7
            requireLogin: false
            persistenceEnabled: true
            journalType: nio
            messageMigration: true
            addressSettings:
                addressSetting:
                 -  match: myAddress
    match
    ブローカーが以下の設定を適用するアドレスまたはアドレスのセットを指定します。この例では、match プロパティーの値は myAddress と呼ばれる単一のアドレスに対応します。
  7. 未配信メッセージに関連するプロパティーを追加し、値を指定します。以下に例を示します。

    spec:
        version: 7.7.0
        deploymentPlan:
            size: 3
            image: registry.redhat.io/amq7/amq-broker:7.7
            requireLogin: false
            persistenceEnabled: true
            journalType: nio
            messageMigration: true
            addressSettings:
                addressSetting:
                 -  match: myAddress
                    deadLetterAddress: myDeadLetterAddress
                    maxDeliveryAttempts: 5
    deadLetterAddress
    ブローカーが未達のメッセージを送信するアドレス。
    maxDeliveryAttempts

    メッセージを設定済みのデッドレターアドレスに移動する前にブローカーが行う最大配信試行数。

    上記の例では、ブローカーによって、myAddress で始まるアドレスにメッセージの配信が 5 回失敗する場合、ブローカーはメッセージを指定の dead letter address (myDeadLetterAddress) に移動します。

  8. (オプション) 別のアドレスまたはアドレスセットに同様の設定を適用します。以下に例を示します。

    spec:
        version: 7.7.0
        deploymentPlan:
            size: 3
            image: registry.redhat.io/amq7/amq-broker:7.7
            requireLogin: false
            persistenceEnabled: true
            journalType: nio
            messageMigration: true
            addressSettings:
                addressSetting:
                 -  match: myAddress
                    deadLetterAddress: myDeadLetterAddress
                    maxDeliveryAttempts: 5
                 -  match: 'myOtherAddresses*'
                    deadLetterAddress: myDeadLetterAddress
                    maxDeliveryAttempts: 3

    この例では、2 つ目の match プロパティーの値にはアスタリスクワイルドカード文字が含まれます。ワイルドカード文字では、上記の設定が文字列 myOtherAddresses で始まる任意のアドレスに適用されることを意味します。

    注記

    ワイルドカード式を match プロパティーの値として使用する場合には、値を単一引用符で囲む必要があります (例: 'myOtherAddresses*')。

  9. addressSettings セクションの最初に applyRule プロパティーを追加し、値を指定します。以下に例を示します。

    spec:
        version: 7.7.0
        deploymentPlan:
            size: 3
            image: registry.redhat.io/amq7/amq-broker:7.7
            requireLogin: false
            persistenceEnabled: true
            journalType: nio
            messageMigration: true
            addressSettings:
                applyRule: merge_all
                addressSetting:
                 -  match: myAddress
                    deadLetterAddress: myDeadLetterAddress
                    maxDeliveryAttempts: 5
                 -  match: 'myOtherAddresses*'
                    deadLetterAddress: myDeadLetterAddress
                    maxDeliveryAttempts: 3

    applyRule プロパティーは、Operator を一致するアドレスまたはアドレスのセットごとに CR に追加する設定を適用する方法を指定します。指定できる値は次のとおりです。

    merge_all
    • CR で指定されるアドレス設定、同じアドレスまたはアドレスのセットに一致するデフォルト設定の両方の場合:

      • デフォルト設定で指定されるプロパティー値を CR で指定されたプロパティー値に置き換えます。
      • CR またはデフォルト設定で一意で指定されるプロパティー値を保持します。これらはそれぞれ最終マージされた設定の組み込みます。
    • CR で指定されるアドレス設定または特定のアドレスセットに一意になるデフォルト設定の場合は、これらを最終でマージされた設定に含めます。
    merge_replace
    • CR に指定されたアドレス設定、同じアドレスまたはアドレスセットに一致するデフォルト設定について、最終的なマージされた設定の CR に指定された設定を含めます。それらのプロパティーが CR で指定されていない場合でも、デフォルト設定に指定されたプロパティーを含めないでください。
    • CR で指定されるアドレス設定または特定のアドレスセットに一意になるデフォルト設定の場合は、これらを最終でマージされた設定に含めます。
    replace_all
    デフォルト設定に指定されたすべてのアドレス設定を CR で指定されたアドレス設定に置き換えます。最後にマージされた設定は、CR で指定したものと完全に対応します。
    注記

    CR に applyRule プロパティーを明示的に含ない場合、Operator は merge_all のデフォルト値を使用します。

  10. ブローカー CR インスタンスをデプロイします。

    1. OpenShift コマンドラインインターフェイスの使用:

      1. CR ファイルを保存します。
      2. CR を作成します。

        $ oc create -f <path/to/broker-custom-resource-instance>.yaml
    2. OpenShift Web コンソールの使用

      1. CR の設定が完了したら、Create をクリックします。

4.1.3.1. デフォルトのアドレス設定について

Operator ベースのブローカーのデプロイメントを作成する場合、各ブローカーの Pod は OpenShift プロジェクトの StatefulSet で実行されます。ブローカーのアプリケーションコンテナーは各 Pod 内で実行されます。

ブローカーデプロイメントのカスタムリソース (CR) インスタンスにアドレス設定が含まれている場合に、Operator は各 Pod を初期化するときに Init コンテナー と呼ばれるタイプのコンテナーも実行します。OpenShift Container Platform では、Init コンテナーはアプリケーションコンテナーの前に実行される特殊なコンテナーです。通常、Init コンテナーには、アプリケーションイメージに存在しないユーティリティーまたはセットアップスクリプトを含めることができます。

CR でアドレス設定を指定した場合、各ブローカー Pod の初期化は次の順番に行います。

  1. 初期化コンテナーを実行する。Init Container が、CR のアドレス設定を処理し、設定を XML に変換する。
  2. Init Container が完了すると、ブローカーアプリケーションコンテナーが開始される。ブローカーが開始されると、default のアドレス設定が作成され、生成された broker.xml 設定ファイルに追加される。デフォルトのアドレス設定は次のようになります。

    <address-settings>
        <!--
        if you define auto-create on certain queues, management has to be auto-create
        -->
        <address-setting match="activemq.management#">
            <dead-letter-address>DLQ</dead-letter-address>
            <expiry-address>ExpiryQueue</expiry-address>
            <redelivery-delay>0</redelivery-delay>
            <!--
            with -1 only the global-max-size is in use for limiting
            -->
            <max-size-bytes>-1</max-size-bytes>
            <message-counter-history-day-limit>10</message-counter-history-day-limit>
            <address-full-policy>PAGE</address-full-policy>
            <auto-create-queues>true</auto-create-queues>
            <auto-create-addresses>true</auto-create-addresses>
            <auto-create-jms-queues>true</auto-create-jms-queues>
            <auto-create-jms-topics>true</auto-create-jms-topics>
        </address-setting>
    
        <!-- default for catch all -->
        <address-setting match="#">
            <dead-letter-address>DLQ</dead-letter-address>
            <expiry-address>ExpiryQueue</expiry-address>
            <redelivery-delay>0</redelivery-delay>
            <!--
            with -1 only the global-max-size is in use for limiting
            -->
            <max-size-bytes>-1</max-size-bytes>
            <message-counter-history-day-limit>10</message-counter-history-day-limit>
            <address-full-policy>PAGE</address-full-policy>
            <auto-create-queues>true</auto-create-queues>
            <auto-create-addresses>true</auto-create-addresses>
            <auto-create-jms-queues>true</auto-create-jms-queues>
            <auto-create-jms-topics>true</auto-create-jms-topics>
        </address-setting>
    <address-settings>
  3. CR の applyRule プロパティーの値に基づき、Operator がマージするか、上記のデフォルトのアドレス設定を CR で指定した設定に置き換えます。

    ブローカー Pod が初期化されて実行されたら、broker.xml 設定ファイルで結果のアドレス設定を調べることができます。実行中のブローカー Pod の場合に、このファイルは /home/jboss/amq-broker/etc ディレクトリーにあります。

関連情報

  • CR でアドレス設定の applyRule プロパティーを設定する方法は、「Operator ベースのブローカーデプロイメントで設定されたアドレスへのマッチングアドレス設定」 を参照してください。
  • OpenShift Container Platform ブローカーデプロイメントのアドレス、キュー、およびアドレス設定のすべての設定オプションについては、「カスタムリソース設定リファレンス」 を参照してください。
  • OpenShift コマンドラインインターフェイス (CLI) を使用して AMQ Broker Operator をインストールしている場合、ダウンロードしたインストールアーカイブおよび抽出したインストールアーカイブには、アドレス設定に関する追加例が含まれています。インストールアーカイブの deploy/examples ディレクトリーで、以下を参照してください。

    • artemis-basic-address-settings-deployment.yaml
    • artemis-merge-replace-address-settings-deployment.yaml
    • artemis-replace-address-settings-deployment.yaml
  • スタンドアロン ブローカーデプロイメントのアドレス、キュー、および関連アドレス設定に関する包括的な情報は、AMQ Broker の設定アドレス、キューおよびトピック を参照してください。この情報を使用して、OpenShift Container Platform のブローカーデプロイメントの同等の設定を作成できます。
  • OpenShift Container Platform の Init コンテナーの詳細については、以下を参照してください。