第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 コンソールのAdministration → Custom Resource Definitions に一覧表示されている
ActiveMQAretmisAddress
CRD になります。
-
OpenShift コマンドラインインターフェイス (CLI) を使用して Operator をインストールした場合、アドレス CRD は、ダウンロードした Operator インストールアーカイブの
特定のアドレスに一致するアドレスおよびキュー設定を設定するには、ブローカーデプロイメントの作成に使用されるメインのカスタムリソース (CR) インスタンスに設定を含めます。
-
OpenShift CLI を使用して Operator をインストールした場合、メインのブローカー CRD は、ダウンロードした Operator インストールアーカイブの
deploy/crds
に含まれるbroker_activemqartemis_crd.yaml
ファイルです。 -
OperatorHub を使用して Operator をインストールした場合、メインブローカー CRD は OpenShift Container Platform Web コンソールのAdministration → Custom 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 のスタンドアロンブローカーデプロイメントのいずれでも完全に同等です。ただし、これらの設定についての違いに注意してください。これらの違いは、以下のサブセクションで説明します。
-
OpenShift CLI を使用して Operator をインストールした場合、メインのブローカー CRD は、ダウンロードした Operator インストールアーカイブの
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
関連情報
OpenShift Container Platform ブローカーデプロイメントのアドレスおよびキューの作成と一致する設定の例については、以下を参照してください。
- OpenShift Container Platform ブローカーデプロイメントのアドレス、キュー、およびアドレス設定のすべての設定オプションについては、「カスタムリソース設定リファレンス」 を参照してください。
- スタンドアロン ブローカーデプロイメントのアドレス、キュー、および関連アドレス設定に関する包括的な情報は、AMQ Broker の設定 の アドレス、キューおよびトピック を参照してください。この情報を使用して、OpenShift Container Platform のブローカーデプロイメントの同等の設定を作成できます。
4.1.2. Operator ベースのブローカーデプロイメントのアドレスおよびキューの作成
以下の手順では、カスタムリソース (CR) インスタンスを使用してアドレスおよび関連付けられたキューを Operator ベースのブローカーデプロイメントに追加する方法を説明します。
ブローカーデプロイメントに複数のアドレスやキューを作成するには、個別の CR ファイルを作成してそれらを個別にデプロイし、それぞれのケースに新しいアドレスやキュー名を指定する必要があります。さらに、各 CR インスタンスの name
属性は一意である必要があります。
前提条件
ブローカーでアドレスおよびキューを作成するために必要な専用のカスタムリソース定義 (CRD) を含む AMQ Broker Operator がすでにインストールされている必要があります。Operator のインストール方法の 2 つの代替方法については、以下を参照してください。
- AMQ Broker に含まれるサンプル CR を使用して、基本的な Broker デプロイメントを作成する方法を理解しておく必要があります。詳細は、「基本的なブローカーインスタンスのデプロイ」 を参照してください。
手順
カスタムリソース (CR) インスタンスの設定を開始し、ブローカーデプロイメントのアドレスおよびキューを定義します。
OpenShift コマンドラインインターフェイスの使用:
ブローカーのデプロイメントを含むプロジェクトの管理者権限で OpenShift にログインします。
oc login -u <user> -p <password> --server=<host:port>
-
ダウンロードした Operator インストールアーカイブの
deploy/crs
ディレクトリーに含まれるbroker_activemqartemisaddress_cr.yaml
というサンプル CR ファイルを開きます。
OpenShift Container Platform Web コンソールの使用
- ブローカーのデプロイメントを含むプロジェクトの管理者権限でコンソールにログインします。
- アドレス CRD に基づいて新規 CR インスタンスを起動します。左側のペインで、Administration → Custom Resource Definitions をクリックします。
-
ActiveMQArtemisAddresss
CRD をクリックします。 -
Instances
タブをクリックします。 Create ActiveMQArtemisAddress をクリックします。
コンソールで、YAML エディターが開き、CR インスタンスを設定できます。
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 プロジェクトの名前です。CR インスタンスをデプロイします。
OpenShift コマンドラインインターフェイスの使用:
- CR ファイルを保存します。
ブローカーのデプロイメントが含まれるプロジェクトに切り替えます。
$ oc project <project-name>
CR を作成します。
$ oc create -f <path/to/address-custom-resource-instance>.yaml
OpenShift Web コンソールの使用
- CR の設定が完了したら、Create をクリックします。
(オプション) CR インスタンスを使用して以前にデプロイメントに追加されたアドレスおよびキューを削除するには、以下のコマンドを使用します。
$ oc delete -f <path/to/address-custom-resource-instance>.yaml
4.1.3. Operator ベースのブローカーデプロイメントで設定されたアドレスへのマッチングアドレス設定
クライアントにメッセージの配信に失敗した場合は、ブローカーがメッセージの配信を継続しようとしない場合があります。無限配信を試行するのを防ぐために、デッドレターアドレスと関連するデッドレターキューを定義できます。指定の数の配信試行後、ブローカーは元のキューから未配信メッセージを削除し、そのメッセージを設定済みのデッドレターアドレスに送信します。システム管理者は、デッド文字キューから未配信メッセージを後で消費してメッセージを検査できます。
以下の例は、Operator ベースのブローカーデプロイメントのデッドレターアドレスおよびキューを設定する方法を示しています。この例では、メインブローカーのカスタムリソース (CR) インスタンスの addressSetting
セクションを使用してアドレス設定を指定し、それらの設定をブローカーデプロイのアドレスと同じものにする方法を示します。
CR を初めてデプロイする 前に、ブローカデプロイのメイン CR インスタンスにアドレス設定を追加する必要があります。アドレス設定を、すでに実行中のブローカーデプロイメントに追加 できません。
前提条件
- AMQ Broker 7.7 の最新バージョンの Operator を使用する必要があります (バージョン 0.17)。Operator を最新バージョンにアップグレードする方法については、5章Operator ベースのブローカーデプロイメントのアップグレード を参照してください。
- AMQ Broker に含まれるサンプル CR を使用して、基本的な Broker デプロイメントを作成する方法を理解しておく必要があります。詳細は、「基本的なブローカーインスタンスのデプロイ」 を参照してください。
手順
CR インスタンスを設定して、デッドレターアドレスとキューを追加して、デプロイメント内の各ブローカーの配信されていないメッセージを受信します。
OpenShift コマンドラインインターフェイスの使用:
ブローカーのデプロイメントを含むプロジェクトの管理者権限で OpenShift にログインします。
oc login -u <user> -p <password> --server=<host:port>
-
ダウンロードした Operator インストールアーカイブの
deploy/crs
ディレクトリーに含まれるbroker_activemqartemisaddress_cr.yaml
というサンプル CR ファイルを開きます。
OpenShift Container Platform Web コンソールの使用
- ブローカーのデプロイメントを含むプロジェクトの管理者権限でコンソールにログインします。
- アドレス CRD に基づいて新規 CR インスタンスを起動します。左側のペインで、Administration → Custom Resource Definitions をクリックします。
-
ActiveMQArtemisAddresss
CRD をクリックします。 -
Instances
タブをクリックします。 Create ActiveMQArtemisAddress をクリックします。
コンソールで、YAML エディターが開き、CR インスタンスを設定できます。
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 プロジェクトの名前です。アドレス CR インスタンスをデプロイします。
OpenShift コマンドラインインターフェイスの使用:
- CR ファイルを保存します。
ブローカーデプロイメントのプロジェクトに切り替えます。
$ oc project <project-name>
アドレス CR を作成します。
$ oc create -f <path/to/address-custom-resource-instance>.yaml
OpenShift Web コンソールの使用
- CR の設定が完了したら、Create をクリックします。
ブローカーデプロイメントのカスタムリソース (CR) インスタンスの設定を開始します。
CR ファイルのサンプルの場合:
-
ダウンロードした Operator インストールアーカイブの
deploy/crs
ディレクトリーに含まれるbroker_activemqartemis_cr.yaml
というサンプル CR ファイルを開きます。
-
ダウンロードした Operator インストールアーカイブの
OpenShift Container Platform Web コンソールの使用
- メインブローカー CRD に基づいて新規 CR インスタンスを起動します。左側のペインで、Administration → Custom Resource Definitions をクリックします。
-
ActiveMQArtemis
CRD をクリックします。 -
Instances
タブをクリックします。 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 プロジェクトの名前です。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:
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
と呼ばれる単一のアドレスに対応します。
未配信メッセージに関連するプロパティーを追加し、値を指定します。以下に例を示します。
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
) に移動します。
(オプション) 別のアドレスまたはアドレスセットに同様の設定を適用します。以下に例を示します。
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*'
)。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
のデフォルト値を使用します。ブローカー CR インスタンスをデプロイします。
OpenShift コマンドラインインターフェイスの使用:
- CR ファイルを保存します。
CR を作成します。
$ oc create -f <path/to/broker-custom-resource-instance>.yaml
OpenShift Web コンソールの使用
- CR の設定が完了したら、Create をクリックします。
4.1.3.1. デフォルトのアドレス設定について
Operator ベースのブローカーのデプロイメントを作成する場合、各ブローカーの Pod は OpenShift プロジェクトの StatefulSet で実行されます。ブローカーのアプリケーションコンテナーは各 Pod 内で実行されます。
ブローカーデプロイメントのカスタムリソース (CR) インスタンスにアドレス設定が含まれている場合に、Operator は各 Pod を初期化するときに Init コンテナー と呼ばれるタイプのコンテナーも実行します。OpenShift Container Platform では、Init コンテナーはアプリケーションコンテナーの前に実行される特殊なコンテナーです。通常、Init コンテナーには、アプリケーションイメージに存在しないユーティリティーまたはセットアップスクリプトを含めることができます。
CR でアドレス設定を指定した場合、各ブローカー Pod の初期化は次の順番に行います。
- 初期化コンテナーを実行する。Init Container が、CR のアドレス設定を処理し、設定を XML に変換する。
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>
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 コンテナーの詳細については、以下を参照してください。
- Pod をデプロイする前に Init コンテナーを使用したタスクの実行 (OpenShift Container Platform 4.1 以降)
- Init コンテナー (OpenShift Container Platform 3.11)