4.2.3. 在基于 Operator 的代理部署中配置的地址设置匹配
如果向客户端发送消息失败,您可能不希望代理持续尝试传送消息。要防止交付无限尝试,您可以定义 死信地址 和关联的 死信队列。在指定数量的交付尝试后,代理会从原始队列中删除未发送的消息,并将消息发送到配置的死信地址。系统管理员以后可以使用无死信队列中的未发送消息来检查消息。
以下示例演示了如何为基于 Operator 的代理部署配置死信地址和队列。这个示例演示了如何:
-
使用主代理自定义资源(CR)实例的
addressSetting部分来配置地址设置。 - 将这些地址设置与代理部署中的地址匹配。
先决条件
- 您必须对 AMQ Broker 7.8 使用最新版本的 Operator(即 7.8.5-opr-2 版本)。要了解如何将 Operator 升级到最新版本,请参阅 第 6 章 升级基于 Operator 的代理部署。
- 您应该熟悉如何使用 CR 实例创建基本代理部署。如需更多信息,请参阅 第 3.4.1 节 “部署基本代理实例”。
- 您应该熟悉 Operator 合并或替换 CR 实例中指定的配置 的默认 地址设置配置。如需更多信息,请参阅 第 4.1.1 节 “Operator 如何生成地址设置配置”。
步骤
开始配置 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 上述配置定义了名为
myDeadLetterAddress的死信地址,它具有名为myDeadLetterQueue和任何广播路由类型的死信队列。注意在
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。
开始为代理部署配置自定义资源(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部分中,添加一个包含单个addressSetting部分的新addressSettings部分,如下所示。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将
match属性的单个实例添加到addressSetting块。指定地址匹配表达式。例如:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 匹配-
指定代理应用以下配置的地址 或一组 地址。在本例中,
match属性的值与名为myAddress的单个地址对应。
添加与未发送消息相关的属性并指定值。例如:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow deadLetterAddress- 代理发送未发送的消息的地址。
maxDeliveryAttempts代理在将消息移动到配置的死信地址前进行的最大交付尝试次数。
在前面的示例中,如果代理使 5 次失败尝试向以
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。部署 broker CR 实例。
使用 OpenShift 命令行界面:
- 保存 CR 文件。
创建 CR 实例。
oc create -f <path/to/broker_custom_resource_instance>.yaml
$ oc create -f <path/to/broker_custom_resource_instance>.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
使用 OpenShift Web 控制台:
- 配置完 CR 后,点 Create。
其他资源
- 要了解 OpenShift Container Platform 代理部署的地址、队列和地址设置的所有配置选项,请参阅 第 11.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 之前使用初始容器来执行任务 (OpenShift Container Platform 4.1 及更新的版本)
- init 容器 (OpenShift Container Platform 3.11)