4.2. 为基于 Operator 的代理部署配置地址和队列
4.2.1. 配置地址和队列 复制链接链接已复制到粘贴板!
您可以通过在 ActiveMQArtemis
CR 实例中为代理部署使用 brokerProperties
属性来配置地址和队列。或者,您可以在 ActiveMQArtemisAddress
CR 中配置地址和队列。
AMQ Broker 7.12 中已弃用 ActiveMQArtemisAddress
CR。
使用 brokerProperties
配置地址和队列
您可以在 brokerProperties
属性下配置地址和队列,并为您创建的每个队列配置设置。
先决条件
您创建了基本代理部署。更多信息请参阅 第 3.4.1 节 “部署基本代理实例”。
流程
-
为您的代理部署编辑
ActiveMQArtemis
CR 实例。 在 CR 的
spec
部分中,如果 CR 中还没有添加brokerProperties
属性。spec: ... brokerProperties: ...
spec: ... brokerProperties: ...
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用格式配置地址:
- addressConfigurations.<address name>.routingTypes=<routing type>
例如:
spec: ... brokerProperties: - addressConfigurations.usa-news-address.routingTypes=MULTICAST ...
spec: ... brokerProperties: - addressConfigurations.usa-news-address.routingTypes=MULTICAST ...
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 为您以以下格式创建的地址配置队列:
- addressConfigurations.<address name>.queueConfigs.<queue name>.address< address>
重要.address 设置的 <address &
gt;
的值必须与您创建的每个队列的 <address name> 匹配。如果这些值不同,则会为每个分别创建单独的地址。在以下示例中,地址名称和.address
设置的值都与usa-news-address
的值相同。spec: ... brokerProperties: - addressConfigurations.usa-news-address.queueConfigs.usa-news-queue.address=usa-news-address ...
spec: ... brokerProperties: - addressConfigurations.usa-news-address.queueConfigs.usa-news-queue.address=usa-news-address ...
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 为您要为队列配置的每个设置添加一个单独的行,格式为:
- addressConfigurations.<address name>.queueConfigs.<queue name>.<queue setting>
例如:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 保存 CR。
-
通过查看
ActiveMQArtemis
CR 的status
部分,检查是否没有在brokerProperties
配置中检测到任何错误。如需更多信息,请参阅 第 2.4 节 “配置不在自定义资源定义(CRD)中公开的项”。
在 ActiveMQArtemisAddress
CR 中配置地址和队列
您可以在 ActiveMQArtemisAddress
CR 中配置地址和队列。要在代理部署中配置多个地址和/或队列,您需要单独创建单独的 CR 实例并部署它们,在每个情况下都指定新的地址和/或队列名称。另外,每个 CR 实例的 name
属性必须是唯一的。
先决条件
已安装通过安装 AMQ Broker Operator 在代理上创建地址和队列所需的自定义资源定义(CRD)。有关安装 Operator 的两个替代方法的详情,请参考:
- 您熟悉如何使用 CR 实例创建基本代理部署。更多信息请参阅 第 3.4.1 节 “部署基本代理实例”。
流程
开始配置自定义资源(CR)实例,为代理部署定义地址和队列。
使用 OpenShift 命令行界面:
以具有特权的用户身份登录 OpenShift,以便在代理部署的项目中部署 CR。
oc login -u <user> -p <password> --server=<host:port>
oc login -u <user> -p <password> --server=<host:port>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
打开名为
broker_activemqartemisaddress_cr.yaml
的示例 CR 文件,该文件包含在您下载和提取的 Operator 安装存档的deploy/crs
目录中。
使用 OpenShift Container Platform Web 控制台:
- 以具有特权的用户身份登录控制台,以便在代理部署的项目中部署 CR。
-
根据地址 CRD 启动新的 CR 实例。在左侧窗格中,单击
。 - 单击 ActiveMQArtemisAddresss CRD。
- 点 实例 选项卡。
单击 Create ActiveMQArtemisAddress。
在控制台中,会打开 YAML 编辑器,供您配置 CR 实例。
在 CR 的
spec
部分中,添加行以定义地址、队列和路由类型。例如:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 上述配置定义了名为
myAddress0
的地址,队列名为myQueue0
和anycast
路由类型。注意在
metadata
部分中,您需要包含namespace
属性,只有在使用 OpenShift Container Platform Web 控制台创建 CR 实例时才指定值。您应该指定的值是代理部署的 OpenShift 项目的名称。部署 CR 实例。
使用 OpenShift 命令行界面:
- 保存 CR 文件。
切换到代理部署的项目。
oc project <project_name>
$ oc project <project_name>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建 CR 实例。
oc create -f <path/to/address_custom_resource_instance>.yaml
$ oc create -f <path/to/address_custom_resource_instance>.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
使用 OpenShift Web 控制台:
- 配置完 CR 后,点 Create。
4.2.2. 配置地址设置 复制链接链接已复制到粘贴板!
您可以使用以下方法之一配置地址设置组,并指定要应用设置的地址标准:
-
如果您为代理部署使用
ActiveMQArtemis
CR 实例中的brokerProperties
属性来配置地址,您也可以在brokerProperties
属性下配置地址设置。 -
如果在
ActiveMQArtemis
AddressaddressSettings
部分中配置地址设置。
以下示例演示了如何使用这两种方法为特定地址模式配置死信地址和队列。代理可以使用死信地址和队列来存储无法传送到客户端的消息,以防止无限发送尝试。系统管理员稍后可能会消耗从死信队列中未发送的消息来检查消息。
先决条件
-
您创建了
ActiveMQArtemis
CR 实例来部署代理。如需更多信息,请参阅 第 3.4.1 节 “部署基本代理实例”。 - 熟悉 Operator 合并或替换为 CR 实例中指定的配置 的默认 地址设置配置。更多信息请参阅 第 4.1.1 节 “Operator 如何生成地址设置配置”。
使用 brokerProperties
配置地址设置
-
为您的代理部署编辑
ActiveMQArtemis
CR 实例。 创建死信地址和队列以接收未发送的消息。例如:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 有关使用
brokerProperties
创建地址和队列的更多信息,请参阅 第 4.2.1 节 “配置地址和队列”。在
brokerProperties
属性下添加单独的行,格式为addressSettings.<address name>
to:- 将未发送消息的死信地址设置为您创建的死信地址。
指定无法传送到匹配地址的消息发送到死信地址的发送尝试次数。
例如:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 您可以使用星号 Ping 或数字符号(""\)字符作为通配符来创建地址模式。模式匹配在每个分隔符边界上完成,该边界由一个句点(.)表示。数字符号字符匹配任何零个或多个单词序列,并可在地址字符串末尾使用。星号字符匹配单个单词,可以在地址字符串中的任何位置使用。例如:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在上例中,以下地址匹配:
-
usa-news credentials
地址模式匹配任何遵循usa-news.
string 的词语,如usa-news.domestic
和usa-news.intl
,但不匹配usa-news.domestic.politics
。 europe-news
.650europe-news
、europe-news.politics
和europe-news.politics.fr
。注意在
brokerProperties
条目中,句点(.)是一个保留字符。如果要创建包含句点的地址模式,则必须将地址包括在引号中。例如:"usa-news configured"
- 保存 CR。
-
通过查看
ActiveMQArtemis
CR 的status
部分,检查是否没有在brokerProperties
配置中检测到任何错误。如需更多信息,请参阅 第 2.4 节 “配置不在自定义资源定义(CRD)中公开的项”。
通过在 ActiveMQArtemis
CR 实例中使用 addressSettings
来配置地址设置
如果您在 ActiveMQArtemisAddress
CR 中配置了死信地址和队列,您可以配置设置来限制代理部署的 ActiveMQArtemis
CR 实例中的发送尝试。
先决条件
您使用以下详情创建了地址和队列:
addressName: myDeadLetterAddress
queueName: myDeadLetterQueue
routingType: anycast
有关创建地址和队列的详情,请参考 第 4.2.1 节 “配置地址和队列”
流程
为您的代理部署编辑
ActiveMQArtemis
CR 实例。oc edit ActiveMQArtemis <CR instance name> -n <namespace>
oc edit ActiveMQArtemis <CR instance name> -n <namespace>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 使用 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
部分,添加一个包含单个addressSetting
部分的新addressSettings
部分,如下所示。spec: ... addressSettings: addressSetting:
spec: ... addressSettings: addressSetting:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将
match
属性的单个实例添加到addressSetting
块。指定地址匹配表达式。例如:spec: ... addressSettings: addressSetting: - match: myAddress
spec: ... addressSettings: addressSetting: - match: myAddress
Copy to Clipboard Copied! Toggle word wrap Toggle overflow match
-
指定代理应用以下配置的地址或地址集。在本例中,
match
属性的值对应于一个名为myAddress
的单个地址。
添加与未发送消息相关的属性并指定值。例如:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow deadLetterAddress
- 代理发送未发送的消息的地址。
maxDeliveryAttempts
代理在将消息移至配置的死信地址前进行的最大发送尝试次数。
在前面的示例中,如果代理有五次失败尝试向以
myAddress
开头的地址发送一条消息,代理会将消息移到指定的死信地址,myDeadLetterAddress
。
(可选)将类似的配置应用到另一个地址或一组地址。例如:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在本例中,第二个
match
属性的值包含一个哈希通配符。通配符字符表示上述配置应用于以字符串myOtherAddresses
开头的任何地址。注意如果您使用通配符表达式作为
match
属性的值,您必须将该值放在单引号中,例如'myOtherAddresses#'
。在
addressSettings
部分的开头,添加applyRule
属性并指定值。例如:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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 实例。
4.2.2.1. 可配置地址和队列设置 复制链接链接已复制到粘贴板!
通常,您可以为 OpenShift Container Platform 上的代理部署配置的地址和队列设置 完全相当于 Linux 或 Windows 上的独立代理部署。但是,您应该注意,这些设置是如何配置的一些变化。这些区别在以下子部分进行了描述。
-
要在 OpenShift Container Platform 上为代理部署配置地址和队列设置,您需要向代理部署的主自定义资源(CR)实例的
addressSettings
部分添加配置。这与 Linux 或 Windows 上的独立部署不同,后者将配置添加到broker.xml
配置文件中的address-settings
元素中。 用于配置项名称的格式在 OpenShift Container Platform 和独立代理部署之间有所不同。对于 OpenShift Container Platform 部署,配置项名称在 camel case 中,例如
defaultQueueRoutingType
。相反,独立部署的配置项名称为小写,并使用短划线(-
)分隔符,如default-queue-routing-type
。下表显示了一些进一步的命名差异示例。
Expand 表 4.2. 配置项名称的不同示例 独立代理部署的配置项目 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.3. 删除地址和队列 复制链接链接已复制到粘贴板!
根据您创建的地址和队列的方式,您可以通过删除 ActiveMQArtemis
CR 中的 brokerProperties
条目,或使用 ActiveMQArtemisAddress
CR 来删除地址和队列。
删除使用代理 Properties 创建的地址
和队列
您可以通过从 brokerProperties
属性下的条目中删除条目来删除单个地址和队列。
先决条件
- 您创建了基本代理部署。更多信息请参阅 第 3.4.1 节 “部署基本代理实例”。
流程
-
为您的代理部署编辑
ActiveMQArtemis
CR 实例。 添加以下
brokerProperties
条目,以允许代理删除任何地址,由数字符号(#)表示,以及它不再在 CR 中找到的相关队列。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在
brokerProperties
属性下,删除引用您要删除的地址和队列的所有行。例如,删除所有引用usa-news
地址的行来删除此地址和队列:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 保存 CR。
当代理应用更新的配置时,它会删除您从 CR 中删除的地址和队列。
删除 ActiveMQArtemisAddress
CR 中的地址和队列
如果您在 CR 中创建地址和队列,您可以删除 ActiveMQArtemisAddress
CR 中的地址和队列。
流程
确保有一个带有详细信息的地址 CR 文件,例如:您要删除的地址和
队列的名称
、addressName
和queueName
。例如:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在地址 CR 的
spec
部分中,添加removeFromBrokerOnDelete
属性,并将它设为true
的值。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将
removeFromBrokerOnDelete
属性设置为true
会导致 Operator 在删除地址 CR 时删除所有代理的地址和任何关联的消息。应用更新的地址 CR,为您要删除的地址设置
removeFromBrokerOnDelete
属性。oc apply -f <path/to/address_custom_resource_instance>.yaml
$ oc apply -f <path/to/address_custom_resource_instance>.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 删除地址 CR,从部署中的代理中删除地址。
oc delete -f <path/to/address_custom_resource_instance>.yaml
$ oc delete -f <path/to/address_custom_resource_instance>.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
其他资源
- 要了解 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 前执行任务。