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


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

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

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

先决条件

步骤

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

    1. 使用 OpenShift 命令行界面:

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

        oc login -u <user> -p <password> --server=<host:port>
        Copy to Clipboard Toggle word wrap
      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
        ...
    Copy to Clipboard Toggle word wrap

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

    注意

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

  3. 部署地址 CR 实例。

    1. 使用 OpenShift 命令行界面:

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

        $ oc project <project_name>
        Copy to Clipboard Toggle word wrap
      3. 创建地址 CR。

        $ oc create -f <path/to/address_custom_resource_instance>.yaml
        Copy to Clipboard Toggle word wrap
    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
    Copy to Clipboard Toggle word wrap

    观察 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:
    Copy to Clipboard Toggle word wrap
  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
    Copy to Clipboard Toggle word wrap
    匹配
    指定代理应用以下配置的地址 或一组 地址。在本例中,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
    Copy to Clipboard Toggle word wrap
    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
    Copy to Clipboard Toggle word wrap

    在本例中,第二个 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
    Copy to Clipboard Toggle word wrap

    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
        Copy to Clipboard Toggle word wrap
    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
返回顶部