4.2.3. 在基于 Operator 的代理部署中配置的地址设置匹配


如果向客户端发送消息失败,您可能不希望代理持续尝试传送消息。要防止交付无限尝试,您可以定义 死信地址 和关联的 死信队列。在指定数量的交付尝试后,代理会从原始队列中删除未发送的消息,并将消息发送到配置的死信地址。系统管理员以后可以使用无死信队列中的未发送消息来检查消息。

以下示例演示了如何为基于 Operator 的代理部署配置死信地址和队列。这个示例演示了如何:

  • 使用主代理自定义资源(CR)实例的 addressSetting 部分来配置地址设置。
  • 将这些地址设置与代理部署中的地址匹配。

先决条件

步骤

  1. 开始配置 CR 实例,添加一个死信地址和队列,以接收部署中的每个代理的未发送消息。

    1. 使用 OpenShift 命令行界面:

      1. 以具有部署代理部署的项目中部署 CR 权限的用户身份登录 OpenShift。

        oc login -u <user> -p <password> --server=<host:port>
      2. 打开名为 broker_activemqartemisaddress_cr.yaml 的示例 CR 文件,该文件包括在您下载并提取的 Operator 安装的 deploy/crs 目录中。
    2. 使用 OpenShift Container Platform Web 控制台:

      1. 以具有部署代理部署 CR 权限的用户身份登录控制台。
      2. 根据地址 CRD 启动新的 CR 实例。在左侧窗格中,单击 Administration Custom Resource Definitions
      3. 单击 ActiveMQArtemisAddresss CRD。
      4. 实例 选项卡。
      5. 单击 Create ActiveMQArtemisAddress

        在控制台中,会打开 YAML 编辑器,供您配置 CR 实例。

  2. 在 CR 的 spec 部分,添加行来指定死信地址和队列以接收未发送的消息。例如:

    apiVersion: broker.amq.io/v2alpha2
    kind: ActiveMQArtemisAddress
    metadata:
        name: ex-aaoaddress
    spec:
        ...
        addressName: myDeadLetterAddress
        queueName: myDeadLetterQueue
        routingType: anycast
        ...

    上述配置定义了名为 myDeadLetterAddress 的死信地址,它具有名为 myDeadLetterQueue 和任何广播路由类型的死信队列。

    注意

    metadata 部分,您只需要包含 namespace 属性,只有在您 使用 OpenShift Container Platform Web 控制台创建 CR 时才指定一个值。您指定的值是代理部署的 OpenShift 项目的名称。

  3. 部署地址 CR 实例。

    1. 使用 OpenShift 命令行界面:

      1. 保存 CR 文件。
      2. 切换到代理部署的项目。

        $ oc project <project_name>
      3. 创建地址 CR。

        $ oc create -f <path/to/address_custom_resource_instance>.yaml
    2. 使用 OpenShift Web 控制台:

      1. 配置完 CR 后,点 Create
  4. 开始为代理部署配置自定义资源(CR)实例。

    1. 通过示例 CR 文件:

      1. 打开名为 broker_activemqartemis_cr.yaml 的示例 CR 文件,该文件包括在您下载并提取的 Operator 安装的 deploy/crs 目录中。
    2. 使用 OpenShift Container Platform Web 控制台:

      1. 根据主代理 CRD 启动一个新的 CR 实例。在左侧窗格中,单击 Administration Custom Resource Definitions
      2. 单击 ActiveMQArtemis CRD。
      3. 实例 选项卡。
      4. 单击 Create ActiveMQArtemis

        在控制台中,会打开 YAML 编辑器,供您配置 CR 实例。

    对于基本代理部署,配置可能类似以下配置。此配置是 broker_activemqartemis_cr.yaml 示例 CR 文件的默认内容。

    apiVersion: broker.amq.io/v2alpha4
    kind: ActiveMQArtemis
    metadata:
      name: ex-aao
      application: ex-aao-app
    spec:
        version: 7.8.5
        deploymentPlan:
            size: 1
            image: placeholder
            requireLogin: false
            persistenceEnabled: true
            journalType: nio
            messageMigration: true

    观察 broker_activemqartemis_cr.yaml 示例 CR 文件中,image 属性被设置为 占位符 的默认值。这个值表示,默认情况下,image 属性没有指定用于部署的代理容器镜像。要了解 Operator 如何确定要使用的适当代理容器镜像,请参阅 第 2.4 节 “Operator 如何选择容器镜像”

    注意

    metadata 部分,您只需要包含 namespace 属性,只有在您 使用 OpenShift Container Platform Web 控制台创建 CR 时才指定一个值。您指定的值是代理部署的 OpenShift 项目的名称。

  5. 在 CR 的 deploymentPlan 部分中,添加一个包含单个 addressSetting 部分的新 addressSettings 部分,如下所示。

    spec:
        version: 7.8.5
        deploymentPlan:
            size: 1
            image: placeholder
            requireLogin: false
            persistenceEnabled: true
            journalType: nio
            messageMigration: true
            addressSettings:
                addressSetting:
  6. match 属性的单个实例添加到 addressSetting 块。指定地址匹配表达式。例如:

    spec:
        version: 7.8.5
        deploymentPlan:
            size: 1
            image: placeholder
            requireLogin: false
            persistenceEnabled: true
            journalType: nio
            messageMigration: true
            addressSettings:
                addressSetting:
                 -  match: myAddress
    匹配
    指定代理应用以下配置的地址 或一组 地址。在本例中,match 属性的值与名为 myAddress 的单个地址对应。
  7. 添加与未发送消息相关的属性并指定值。例如:

    spec:
        version: 7.8.5
        deploymentPlan:
            size: 1
            image: placeholder
            requireLogin: false
            persistenceEnabled: true
            journalType: nio
            messageMigration: true
            addressSettings:
                addressSetting:
                 -  match: myAddress
                    deadLetterAddress: myDeadLetterAddress
                    maxDeliveryAttempts: 5
    deadLetterAddress
    代理发送未发送的消息的地址。
    maxDeliveryAttempts

    代理在将消息移动到配置的死信地址前进行的最大交付尝试次数。

    在前面的示例中,如果代理使 5 次失败尝试向以 myAddress 开头的地址发送消息,代理会将消息移到指定的死信地址 myDeadLetterAddress

  8. (可选)应用类似的配置到另一个地址或一组地址。例如:

    spec:
        version: 7.8.5
        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*'

  9. addressSettings 部分的开头,添加 applyRule 属性并指定值。例如:

    spec:
        version: 7.8.5
        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

  10. 部署 broker CR 实例。

    1. 使用 OpenShift 命令行界面:

      1. 保存 CR 文件。
      2. 创建 CR 实例。

        $ oc create -f <path/to/broker_custom_resource_instance>.yaml
    2. 使用 OpenShift Web 控制台:

      1. 配置完 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 中初始容器的更多信息,请参阅:

Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2026 Red Hat
返回顶部