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


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

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

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

先决条件

流程

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

    1. 使用 OpenShift 命令行界面:

      1. 以具有特权的用户身份登录 OpenShift,以便在项目中为代理部署部署 CR。

        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. 单击 ActiveMQArtemisAddress 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 和 any cast 路由类型的死信队列。

    注意

    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.9.3
        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 部分中,添加一个包含单个 addressSettings 部分的新 addressSettings 部分,如下所示。

    spec:
        version: 7.9.3
        deploymentPlan:
            size: 1
            image: placeholder
            requireLogin: false
            persistenceEnabled: true
            journalType: nio
            messageMigration: true
            addressSettings:
                addressSetting:
    Copy to Clipboard Toggle word wrap
  6. match 属性的一个实例添加到 addressSetting 块。指定一个 address-matching 表达式。例如:

    spec:
        version: 7.9.3
        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.9.3
        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

    代理在将消息移至配置的死信地址前尝试的最大发送次数。

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

  8. (可选)应用与其他地址或地址集类似的配置。例如:

    spec:
        version: 7.9.3
        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.9.3
        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 中指定。
    • 对于 CR 中指定的地址设置 或者唯一与特定地址或地址集匹配的默认配置,请在最终合并的配置中包括它们。
    replace_all
    将默认配置中指定的 所有 地址设置替换为 CR 中指定的设置。最后,合并后的配置与 CR 中指定的配置完全对应。
    注意

    如果没有在 CR 中明确包含 applyRule 属性,Operator 将使用默认值 merge_all

  10. 部署代理 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 代理部署的地址、队列和地址设置的所有配置选项,请参阅 第 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 前执行任务
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2025 Red Hat