4.2. 为基于 Operator 的代理部署配置地址和队列
对于基于 Operator 的代理部署,您可以使用两个单独的自定义资源(CR)实例来配置地址和队列及其关联的设置。
要在代理上创建地址和队列,您可以根据地址自定义资源定义(CRD)部署 CR 实例。
-
如果您使用 OpenShift 命令行界面(CLI)安装 Operator,则地址 CRD 是您下载和提取的 Operator 安装存档的
deploy/crds
中的broker_activemqartemisaddress_crd.yaml
文件。 -
如果您使用 OperatorHub 安装 Operator,则地址 CRD 是 OpenShift Container Platform Web 控制台的
下列出的 ActiveMQArtemisAddress
CRD。
-
如果您使用 OpenShift 命令行界面(CLI)安装 Operator,则地址 CRD 是您下载和提取的 Operator 安装存档的
要配置与特定地址匹配的地址和队列设置,您可以在用于创建代理部署的主自定义资源(CR)实例中包含配置。
-
如果使用 OpenShift CLI 安装 Operator,主代理 CRD 是
broker_activemqartemis_crd.yaml
文件,该文件包含在您下载和提取的 Operator 安装存档的deploy/crds
中。 -
如果您使用 OperatorHub 安装 Operator,则主要代理 CRD 是
OpenShift
Container Platform Web 控制台的下列出的 ActiveMQArtemis CRD。
通常,您可以为 OpenShift Container Platform 上的代理部署配置的地址和队列设置 完全等同于 Linux 或 Windows 上部署的独立代理部署。但是,您应该注意,这些设置是如何配置的一些变化。以下子部分中描述了这些区别。
-
如果使用 OpenShift CLI 安装 Operator,主代理 CRD 是
4.2.1. OpenShift 和独立代理部署之间的地址和队列设置的不同
-
要在 OpenShift Container Platform 上为代理部署配置地址和队列设置,您可以将配置添加到代理部署的主自定义资源(CR)实例的
addressSettings
部分。这与 Linux 或 Windows 上的独立部署不同,您可以将配置添加到broker.xml
配置文件的address-settings
元素中。 用于配置项目名称的格式因 OpenShift Container Platform 和独立代理部署而异。对于 OpenShift Container Platform 部署,配置项名称位于 camel 示例中,例如
defaultQueueRoutingType
。相反,独立部署的配置项名称在小写中,并使用短划线(-
)分隔符,如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 代理部署的地址、队列和地址设置的所有配置选项,请参阅 第 8.1 节 “自定义资源配置参考”。
- 有关为 独立代理 部署配置地址、队列和相关地址设置的综合信息,请参阅配置 AMQ Broker 中的配置 地址和队列。您可以使用这些信息为 OpenShift Container Platform 上的代理部署创建等同的配置。
4.2.2. 为基于 Operator 的代理部署创建地址和队列
以下流程演示了如何使用自定义资源(CR)实例将地址和相关队列添加到基于 Operator 的代理部署中。
要在代理部署中创建多个地址和/或队列,您需要创建单独的 CR 文件并单独部署它们,并为每个情况下指定新的地址和/或队列名称。另外,每个 CR 实例的 name
属性必须是唯一的。
先决条件
您必须已安装了 AMQ Broker Operator,包括在代理上创建地址和队列所需的专用自定义资源定义(CRD)。有关安装 Operator 的两个替代方法的详情,请参考:
- 您应该熟悉如何使用 CR 实例创建基本代理部署。更多信息请参阅 第 3.4.1 节 “部署基本代理实例”。
流程
开始配置自定义资源(CR)实例,以定义代理部署的地址和队列。
使用 OpenShift 命令行界面:
以具有特权在项目中为代理部署 CR 的用户身份登录 OpenShift。
oc login -u <user> -p <password> --server=<host:port>
-
打开名为
broker_activemqartemisaddress_cr.yaml
的示例 CR 文件,该文件包含在您下载和提取的 Operator 安装存档的deploy/crs
目录中。
使用 OpenShift Container Platform Web 控制台:
- 以具有特权在项目中为代理部署 CR 的用户登录到控制台。
-
根据地址 CRD 启动一个新的 CR 实例。在左侧窗格中,点
。 - 点 ActiveMQArtemisAddresss CRD。
- 点 实例 选项卡。
单击 Create ActiveMQArtemisAddress。
在控制台中,会打开 YAML 编辑器,供您配置 CR 实例。
在 CR 的
spec
部分中,添加一行来定义地址、队列和路由类型。例如:apiVersion: broker.amq.io/v1beta1 kind: ActiveMQArtemisAddress metadata: name: myAddressDeployment0 namespace: myProject spec: ... addressName: myAddress0 queueName: myQueue0 routingType: anycast ...
以上配置定义了名为
myAddress0
的地址,其队列名为myQueue0
和anycast
路由类型。注意在
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。
4.2.3. 删除基于 Operator 的代理部署的地址和队列
以下流程演示了如何使用自定义资源(CR)实例从基于 Operator 的代理部署中删除地址和相关队列。
流程
确保有一个带有详细信息的地址 CR 文件,例如:您要删除的地址和
队列的名称
、addressName
和queueName
。例如:apiVersion: broker.amq.io/v1beta1 kind: ActiveMQArtemisAddress metadata: name: myAddressDeployment0 namespace: myProject spec: ... addressName: myAddress0 queueName: myQueue0 routingType: anycast ...
在 address CR 的
spec
部分中,添加removeFromBrokerOnDelete
属性,并设置为true
的值。.. spec: addressName: myAddress1 queueName: myQueue1 routingType: anycast removeFromBrokerOnDelete: true
将
removeFromBrokerOnDelete
属性设置为true
会导致 Operator 在删除地址 CR 时删除所有代理的地址和任何关联的消息。应用更新的地址 CR,为您要删除的地址设置
removeFromBrokerOnDelete
属性。$ oc apply -f <path/to/address_custom_resource_instance>.yaml
删除地址 CR,从部署中的代理中删除地址。
$ oc delete -f <path/to/address_custom_resource_instance>.yaml
4.2.4. 在基于 Operator 的代理部署中与配置的地址匹配
如果向客户端发送消息失败,您可能不希望代理不断尝试发送消息。为防止无限交付尝试,您可以定义 死信地址和 关联的 死信队列。在指定的交付尝试后,代理会从其原始队列中删除未发送的消息,并将消息发送到配置的死信地址。系统管理员稍后可以从死信队列中消耗未发送的消息来检查消息。
以下示例演示了如何为基于 Operator 的代理部署配置死信地址和队列。这个示例演示了如何:
-
使用主代理自定义资源(CR)实例的
addressSetting
部分来配置地址设置。 - 将这些地址设置与代理部署中的地址设置匹配。
先决条件
-
您创建了
ActiveMQArtemis
CR 实例来部署代理。如需更多信息,请参阅 第 3.4.1 节 “部署基本代理实例”。 - 熟悉 Operator 合并或替换为 CR 实例中指定的配置 的默认 地址设置配置。更多信息请参阅 第 4.1.1 节 “Operator 如何生成地址设置配置”。
流程
开始配置地址 CR 实例,以添加死信地址和队列,以接收部署中每个代理的未发送的消息。
使用 OpenShift 命令行界面:
以具有特权在项目中为代理部署 CR 的用户身份登录 OpenShift。
oc login -u <user> -p <password> --server=<host:port>
-
打开名为
broker_activemqartemisaddress_cr.yaml
的示例 CR 文件,该文件包含在您下载和提取的 Operator 安装存档的deploy/crs
目录中。
使用 OpenShift Container Platform Web 控制台:
- 以具有特权在项目中为代理部署 CR 的用户登录到控制台。
-
根据地址 CRD 启动一个新的 CR 实例。在左侧窗格中,点
。 - 点 ActiveMQArtemisAddresss CRD。
- 点 实例 选项卡。
单击 Create ActiveMQArtemisAddress。
在控制台中,会打开 YAML 编辑器,供您配置 CR 实例。
在 CR 的
spec
部分中,添加一行来指定死信地址和队列来接收未发送的消息。例如:apiVersion: broker.amq.io/v1beta1 kind: ActiveMQArtemisAddress metadata: name: ex-aaoaddress spec: ... addressName: myDeadLetterAddress queueName: myDeadLetterQueue routingType: anycast ...
前面的配置定义了名为
myDeadLetterAddress
的死信地址,它有一个名为myDeadLetterQueue
的死信队列和anycast
路由类型。注意在
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 实例。
使用 OpenShift 命令行界面:
以具有特权的用户身份登录到 OpenShift,以便在项目中为代理部署编辑和部署 CR。
$ oc login -u <user> -p <password> --server=<host:port>
编辑 CR。
oc edit ActiveMQArtemis <CR instance name> -n <namespace>
使用 OpenShift Container Platform Web 控制台:
- 以具有特权在项目中为代理部署 CR 的用户登录到控制台。
-
在左侧窗格中,点
。 - 点 Red Hat Integration - AMQ Broker for RHEL 8 (Multiarch) operator。
- 点 AMQ Broker 选项卡。
- 单击 ActiveMQArtemis 实例名称的名称。
点 YAML 标签。
在控制台中,会打开 YAML 编辑器,供您编辑 CR 实例。
注意在
metadata
部分中,您需要包含namespace
属性,且仅在 使用 OpenShift Container Platform Web 控制台创建 CR 实例时才指定值。您应指定的值是代理部署的 OpenShift 项目的名称。
在 CR 的
spec
部分中,添加新的addressSettings
部分,其中包含单个addressSetting
部分,如下所示。spec: deploymentPlan: size: 1 image: placeholder requireLogin: false persistenceEnabled: true journalType: nio messageMigration: true addressSettings: addressSetting:
将
match
属性的一个实例添加到addressSetting
块中。指定与地址匹配的表达式。例如:spec: deploymentPlan: size: 1 image: placeholder requireLogin: false persistenceEnabled: true journalType: nio messageMigration: true addressSettings: addressSetting: - match: myAddress
match
-
指定代理将配置应用到的地址 或一组 地址。在本例中,
match
属性的值对应于一个名为myAddress
的单个地址。
添加与未发送的消息相关的属性并指定值。例如:
spec: deploymentPlan: size: 1 image: placeholder requireLogin: false persistenceEnabled: true journalType: nio messageMigration: true addressSettings: addressSetting: - match: myAddress deadLetterAddress: myDeadLetterAddress maxDeliveryAttempts: 5
deadLetterAddress
- 代理向发送未发送未发送的消息的地址。
maxDeliveryAttempts
代理在将消息移动到配置的死信地址前的最大交付尝试次数。
在上例中,如果代理进行五个失败尝试向以
myAddress
开头的地址发送消息,代理会将消息移到指定的死信地址myDeadLetterAddress
中。
(可选)将类似的配置应用到另一地址或一组地址。例如:
spec: deploymentPlan: size: 1 image: placeholder requireLogin: false persistenceEnabled: true journalType: nio messageMigration: true addressSettings: addressSetting: - match: myAddress deadLetterAddress: myDeadLetterAddress maxDeliveryAttempts: 5 - match: 'myOtherAddresses#' deadLetterAddress: myDeadLetterAddress maxDeliveryAttempts: 3
在本例中,第二个
match
属性的值包含一个哈希通配符。通配符字符表示上述配置应用于以字符串myOtherAddresses
开头的任何地址。注意如果您使用通配符表达式作为
match
属性的值,您必须将该值放在单引号中,例如'myOtherAddresses#'
。在
addressSettings
部分的开头,添加applyRule
属性并指定值。例如:spec: deploymentPlan: size: 1 image: placeholder 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 Container Platform 代理部署的地址、队列和地址设置的所有配置选项,请参阅 第 8.1 节 “自定义资源配置参考”。
如果您使用 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 中初始容器的更多信息,请参阅 OpenShift Container Platform 文档中的 部署 pod 前使用初始容器执行任务。