4.2.3. 在基于 Operator 的代理部署中将地址与配置的地址匹配
如果向客户端发送消息失败,您可能不希望代理不断尝试传递消息。为防止无限发送尝试,您可以定义一个 死信地址 和关联的 死信队列。在尝试了指定次数后,代理会从原始队列中删除未传送的消息,并将消息发送到配置的死信地址。之后,系统管理员可以使用死信队列中未传送的消息来检查消息。
以下示例演示了如何为基于 Operator 的代理部署配置死信地址和队列。这个示例演示了如何:
-
使用主代理自定义资源(CR)实例的
addressSetting
部分来配置地址设置。 - 将这些地址设置与代理部署中的地址匹配。
先决条件
- 您必须使用针对 AMQ Broker 7.9(即版本 7.9)的 Operator 的最新版本。要了解如何将 Operator 升级到最新版本,请参阅 第 6 章 升级基于 Operator 的代理部署。
- 您应该熟悉如何使用 CR 实例创建基本的代理部署。如需更多信息,请参阅 第 3.4.1 节 “部署基本代理实例”。
- 您应该熟悉 Operator 合并或替换为 CR 实例中指定的配置 的默认 地址设置配置。如需更多信息,请参阅 第 4.1.1 节 “Operator 如何生成地址设置配置”。
流程
开始配置 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 实例。在左侧窗格中,单击
。 - 单击 ActiveMQArtemisAddress CRD。
- 点 实例 选项卡。
单击 Create ActiveMQArtemisAddress。
在控制台中,会打开 YAML 编辑器,供您配置 CR 实例。
在 CR 的
spec
部分中,添加行来指定死信地址和队列,以接收未传送的消息。例如:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 上述配置定义了一个名为
myDeadLetterAddress
的死信地址,它带有名为myDeadLetterQueue 和 any
cast
路由类型的死信队列。注意在
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。
为代理部署开始配置自定义资源(CR)实例。
示例 CR 文件:
-
打开名为
broker_activemqartemis_cr.yaml
的示例 CR 文件,该文件包含在您下载并提取的 Operator 安装存档的deploy/crs
目录中。
-
打开名为
使用 OpenShift Container Platform Web 控制台:
-
根据主代理 CRD 启动一个新的 CR 实例。在左侧窗格中,单击
。 - 单击 ActiveMQArtemis CRD。
- 点 实例 选项卡。
单击 Create ActiveMQArtemis。
在控制台中,会打开 YAML 编辑器,供您配置 CR 实例。
-
根据主代理 CRD 启动一个新的 CR 实例。在左侧窗格中,单击
对于基本的代理部署,配置可能类似如下。此配置是
broker_activemqartemis_cr.yaml
示例 CR 文件的默认内容。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 请注意,在
broker_activemqartemis_cr.yaml
示例 CR 文件中,image属性
被设置为默认值占位符
。此值表示image
属性默认不指定用于部署的代理容器镜像。要了解 Operator 如何决定要使用的适当代理容器镜像,请参阅 第 2.4 节 “Operator 如何选择容器镜像”。注意在
metadata
部分中,您需要包含namespace
属性,只有在 使用 OpenShift Container Platform Web 控制台创建 CR 实例时才需要指定一个值。您应指定的值是代理部署的 OpenShift 项目的名称。在 CR 的
deploymentPlan
部分中,添加一个包含单个addressSettings
部分的新addressSettings
部分,如下所示。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将
match
属性的一个实例添加到addressSetting
块。指定一个 address-matching 表达式。例如:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 匹配
-
指定代理应用以下配置的地址或地址 集合。在本例中,
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 中指定。
- 对于 CR 中指定的地址设置 , 或者唯一与特定地址或地址集匹配的默认配置,请在最终合并的配置中包括它们。
replace_all
- 将默认配置中指定的 所有 地址设置替换为 CR 中指定的设置。最后,合并后的配置与 CR 中指定的配置完全对应。
注意如果没有在 CR 中明确包含
applyRule
属性,Operator 将使用默认值merge_all
。部署代理 CR 实例。
使用 OpenShift 命令行界面:
- 保存 CR 文件。
创建 CR 实例。
oc create -f <path/to/broker_custom_resource_instance>.yaml
$ oc create -f <path/to/broker_custom_resource_instance>.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
使用 OpenShift Web 控制台:
- 配置完 CR 后,点 Create。
其它资源
- 要了解有关 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 中初始容器的更多信息,请参阅使用初始容器在部署 pod 前执行任务。