4.2. 为基于 Operator 的代理部署配置地址和队列
4.2.1. 配置地址和队列 复制链接链接已复制到粘贴板!
您可以通过在 ActiveMQArtemis CR 实例中为代理部署使用 brokerProperties 属性来配置地址和队列。或者,您可以在 ActiveMQArtemisAddress CR 中配置地址和队列。
AMQ Broker 7.12 中已弃用 ActiveMQArtemisAddress CR。
使用 brokerProperties配置地址和队列
您可以在 brokerProperties 属性下配置地址和队列,并为您创建的每个队列配置设置。
先决条件
您创建了基本代理部署。更多信息请参阅 第 3.4.1 节 “部署基本代理实例”。
流程
-
为您的代理部署编辑
ActiveMQArtemisCR 实例。 在 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。
-
通过查看
ActiveMQArtemisCR 的status部分,检查是否没有在brokerProperties配置中检测到任何错误。如需更多信息,请参阅 第 2.4 节 “配置不在自定义资源定义(CRD)中公开的项”。
在 ActiveMQArtemisAddress CR 中配置地址和队列
您可以在 ActiveMQArtemisAddress CR 中配置地址和队列。要在代理部署中配置多个地址和/或队列,您需要单独创建单独的 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>
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>.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
使用 OpenShift Web 控制台:
- 完成配置 CR 后,点 Create。
4.2.2. 配置地址设置 复制链接链接已复制到粘贴板!
您可以使用以下方法之一配置地址设置组,并指定要应用设置的地址标准:
-
如果您为代理部署使用
ActiveMQArtemisCR 实例中的brokerProperties属性来配置地址,您也可以在brokerProperties属性下配置地址设置。 -
如果在
CR 实例中配置地址,您可以在 ActiveMQArtemis CR 的ActiveMQArtemisAddressaddressSettings部分中配置地址设置。
以下示例演示了如何使用这两种方法为特定地址模式配置死信地址和队列。代理可以使用死信地址和队列来存储无法传送到客户端的消息,以防止无限发送尝试。系统管理员稍后会消耗来自死信队列的未发送消息,以检查消息。
先决条件
-
您创建了
ActiveMQArtemisCR 实例来部署代理。如需更多信息,请参阅 第 3.4.1 节 “部署基本代理实例”。 - 熟悉 Operator 合并或替换为 CR 实例中指定的配置 的默认 地址设置配置。更多信息请参阅 第 4.1.1 节 “Operator 如何生成地址设置配置”。
使用 brokerProperties配置地址设置
-
为您的代理部署编辑
ActiveMQArtemisCR 实例。 创建死信地址和队列以接收未发送的消息。例如:
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 开头的地址,如europe-news.650europe-news、europe-news.politics和europe-news.politics.fr。注意在
brokerProperties条目中,句点(.)是一个保留字符。如果要创建包含句点的地址模式,则必须将地址包括在引号中。例如:"usa-news configured"
- 保存 CR。
-
通过查看
ActiveMQArtemisCR 的status部分,检查是否没有在brokerProperties配置中检测到任何错误。如需更多信息,请参阅 第 2.4 节 “配置不在自定义资源定义(CRD)中公开的项”。
通过在 ActiveMQArtemis CR 实例中使用 addressSettings 来配置地址设置
如果您在 ActiveMQArtemisAddress CR 中配置了死信地址和队列,您可以配置设置来限制代理部署的 ActiveMQArtemis CR 实例中的发送尝试。
先决条件
您使用以下详情创建了地址和队列:
addressName: myDeadLetterAddress
queueName: myDeadLetterQueue
routingType: anycast
有关创建地址和队列的详情,请参考 第 4.2.1 节 “配置地址和队列”
流程
为您的代理部署编辑
ActiveMQArtemisCR 实例。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 9 (Multiarch) operator。
- 点 AMQ Broker 选项卡。
- 单击 ActiveMQArtemis 实例名称。
点 YAML 标签。
在控制台中,会打开 YAML 编辑器,允许您编辑 CR 实例。
注意在
metadata部分中,需要包含namespace属性,只有在使用 OpenShift Container Platform Web 控制台创建 CR 实例时,才指定值。您应该指定的值是代理部署的 OpenShift 项目的名称。在 CR 的
spec部分,添加新的addressSettings部分,其中包含单个addressSetting部分,如下所示。spec: ... addressSettings: addressSetting:spec: ... addressSettings: addressSetting:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将
match属性的单个实例添加到addressSetting块中。指定地址匹配表达式。例如:spec: ... addressSettings: addressSetting: - match: myAddressspec: ... addressSettings: addressSetting: - match: myAddressCopy 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 节 “部署基本代理实例”。
流程
-
为您的代理部署编辑
ActiveMQArtemisCR 实例。 添加以下
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>.yamlCopy 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>.yamlCopy 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 前执行任务。