4.2. 为基于 Operator 的代理部署配置地址和队列


4.2.1. 配置地址和队列

您可以通过在 ActiveMQArtemis CR 实例中为代理部署使用 brokerProperties 属性来配置地址和队列。或者,您可以在 ActiveMQArtemisAddress CR 中配置地址和队列。

注意

AMQ Broker 7.12 中已弃用 ActiveMQArtemisAddress CR。

4.2.1.1. 使用 brokerProperties配置地址和队列

您可以在 brokerProperties 属性下配置地址和队列,并为您创建的每个队列配置设置。

先决条件

您创建了基本代理部署。更多信息请参阅 第 3.4.1 节 “部署基本代理实例”

流程

  1. 为您的代理部署编辑 ActiveMQArtemis CR 实例。
  2. 在 CR 的 spec 部分中,如果 CR 中还没有添加 brokerProperties 属性。

    spec:
      ...
      brokerProperties:
      ...
  3. 使用格式配置地址:

    - addressConfigurations.<address name>.routingTypes=<routing type>

    例如:

    spec:
      ...
      brokerProperties:
      - addressConfigurations.usa-news-address.routingTypes=MULTICAST
      ...
  4. 为您以以下格式创建的地址配置队列:

    - addressConfigurations.<address name>.queueConfigs.<queue name>.address< address&gt;

    重要

    .address 设置的 &lt;address & gt; 的值必须与您创建的每个队列的 <address name> 匹配。如果这些值不同,则会为每个分别创建单独的地址。在以下示例中,地址名称和 .address 设置的值都与 usa-news-address 的值相同。

    spec:
      ...
      brokerProperties:
      - addressConfigurations.usa-news-address.queueConfigs.usa-news-queue.address=usa-news-address
      ...
  5. 为您要为队列配置的每个设置添加一个单独的行,格式为:

    • addressConfigurations.<address name>.queueConfigs.<queue name>.<queue setting>

    例如:

    spec:
      ...
      brokerProperties:
      - addressConfigurations.usa-news-address.queueConfigs.usa-news-queue.routingType=ANYCAST
      - addressConfigurations.usa-news-address.queueConfigs.usa-news-queue.purgeOnNoConsumers=true
      - addressConfigurations.usa-news-address.queueConfigs.usa-news-queue.maxConsumers=20
      ...
  6. 保存 CR。
  7. 通过查看 ActiveMQArtemis CR 的 status 部分,检查是否没有在 brokerProperties 配置中检测到任何错误。如需更多信息,请参阅 第 2.4 节 “配置不在自定义资源定义(CRD)中公开的项”

您可以在 ActiveMQArtemisAddress CR 中配置地址和队列。要在代理部署中配置多个地址和/或队列,您需要单独创建单独的 CR 实例并部署它们,在每个情况下都指定新的地址和/或队列名称。另外,每个 CR 实例的 name 属性必须是唯一的。

先决条件

流程

  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 实例。在左侧窗格中,单击 menu: administration Resource Definitions]。
      3. 单击 ActiveMQArtemisAddresss CRD。
      4. 实例 选项卡。
      5. 单击 Create ActiveMQArtemisAddress

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

  2. 在 CR 的 spec 部分,添加一行以定义地址、队列和路由类型。例如:

    apiVersion: broker.amq.io/v1beta1
    kind: ActiveMQArtemisAddress
    metadata:
        name: myAddressDeployment0
        namespace: myProject
    spec:
        ...
        addressName: myAddress0
        queueName: myQueue0
        routingType: anycast
        ...

    上述配置定义了名为 myAddress0 的地址,其队列名为 myQueue0,以及一个 anycast 路由类型。

    注意

    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.2.2. 配置地址设置

您可以使用以下方法之一配置地址设置组,并指定要应用设置的地址标准:

  • 如果您为代理部署使用 ActiveMQArtemis CR 实例中的 brokerProperties 属性来配置地址,您也可以在 brokerProperties 属性下配置地址设置。
  • 如果在 ActiveMQArtemis Address CR 实例中配置地址,您可以在 ActiveMQArtemis CR 的 addressSettings 部分中配置地址设置。

以下示例演示了如何使用这两种方法为特定地址模式配置死信地址和队列。代理可以使用死信地址和队列来存储无法传送到客户端的消息,以防止无限发送尝试。系统管理员稍后会消耗来自死信队列的未发送消息,以检查消息。

4.2.2.1. 使用 brokerProperties配置地址设置

  1. 为您的代理部署编辑 ActiveMQArtemis CR 实例。
  2. 创建死信地址和队列以接收未发送的消息。例如:

    spec:
      ...
      brokerProperties:
      ...
      - addressConfigurations.usDeadLetter.routingTypes=MULTICAST
      - addressConfigurations.usDeadLetter.queueConfigs.usDeadLetter-queue.address=usDeadLetter

    有关使用 brokerProperties 创建地址和队列的更多信息,请参阅 第 4.2.1.1 节 “使用 brokerProperties配置地址和队列”

  3. brokerProperties 属性下添加单独的行,格式为 addressSettings.<address name&gt; to:

    • 将未发送消息的死信地址设置为您创建的死信地址。
    • 指定无法传送到匹配地址的消息发送到死信地址的发送尝试次数。

      例如:

      spec:
        ...
        brokerProperties:
        ...
        - addressSettings.usa-news.deadLetterAddress=usDeadLetter
        - addressSettings.usa-news.maxDeliveryAttempts=5
        ...

      您可以使用星号 Ping 或数字符号(""\)字符作为通配符来创建地址模式。模式匹配在每个分隔符边界上完成,该边界由一个句点(.)表示。数字符号字符匹配任何零个或多个单词序列,并可在地址字符串末尾使用。星号字符匹配单个单词,可以在地址字符串中的任何位置使用。例如:

      spec:
        ...
        brokerProperties:
        ...
        - addressSettings."usa-news.*".deadLetterAddress=usDeadLetter
        - addressSettings."europe-news.#".deadLetterAddress=euDeadLetter
        ...

      在上例中,以下地址匹配:

    • usa-news credentials 地址模式匹配任何遵循 usa-news. string 的词语,如 usa-news.domesticusa-news.intl,但不匹配 usa-news.domestic.politics
    • europe-news.650 地址模式匹配任何以 europe-news 开头的地址,如 europe-newseurope-news.politicseurope-news.politics.fr

      注意

      brokerProperties 条目中,句点(.)是一个保留字符。如果要创建包含句点的地址模式,则必须将地址包括在引号中。例如:"usa-news configured"

  4. 保存 CR。
  5. 通过查看 ActiveMQArtemis CR 的 status 部分,检查是否没有在 brokerProperties 配置中检测到任何错误。如需更多信息,请参阅 第 2.4 节 “配置不在自定义资源定义(CRD)中公开的项”

如果您在 ActiveMQArtemisAddress CR 中配置了死信地址和队列,您可以配置设置来限制代理部署的 ActiveMQArtemis CR 实例中的发送尝试。

先决条件

您使用以下详情创建了地址和队列:

addressName: myDeadLetterAddress

queueName: myDeadLetterQueue

routingType: anycast

有关创建地址和队列的详情,请参考 第 4.2.1 节 “配置地址和队列”

流程

  1. 为您的代理部署编辑 ActiveMQArtemis CR 实例。

     oc edit ActiveMQArtemis <CR instance name> -n <namespace>
    1. 使用 OpenShift Container Platform Web 控制台:
  2. 以有权在代理部署的项目中部署 CR 的用户身份登录控制台。
  3. 在左侧窗格中,点 menu:Operators[Installed Operator]。
  4. Red Hat Integration - AMQ Broker for RHEL 9 (Multiarch) operator。
  5. AMQ Broker 选项卡。
  6. 单击 ActiveMQArtemis 实例名称。
  7. YAML 标签。

    在控制台中,会打开 YAML 编辑器,允许您编辑 CR 实例。

    注意

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

    1. 在 CR 的 spec 部分,添加新的 addressSettings 部分,其中包含单个 addressSetting 部分,如下所示。

      spec:
        ...
        addressSettings:
          addressSetting:
    2. match 属性的单个实例添加到 addressSetting 块中。指定地址匹配表达式。例如:

      spec:
        ...
        addressSettings:
          addressSetting:
          - match: myAddress
      match
      指定代理应用以下配置的地址或地址集。在本例中,match 属性的值对应于一个名为 myAddress 的地址。
    3. 添加与未发送消息相关的属性并指定值。例如:

      spec:
        ...
        addressSettings:
          addressSetting:
          - match: myAddress
            deadLetterAddress: myDeadLetterAddress
            maxDeliveryAttempts: 5
      deadLetterAddress
      代理向发送未发送消息的地址。
      maxDeliveryAttempts

      代理在将消息移到配置的死信地址之前进行的最大发送尝试数。

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

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

      spec:
        ...
        addressSettings:
          addressSetting:
          - match: myAddress
            deadLetterAddress: myDeadLetterAddress
            maxDeliveryAttempts: 5
          - match: 'myOtherAddresses#'
            deadLetterAddress: myDeadLetterAddress
            maxDeliveryAttempts: 3

      在本例中,第二个 match 属性的值包含一个哈希通配符。通配符字符表示上述配置应用于以字符串 myOtherAddresses 开头的任何地址。

      注意

      如果您使用通配符表达式作为 match 属性的值,您必须将值包括在单引号中,例如 'myOtherAddresses"'

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

      spec:
        ...
          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

    6. 保存 CR 实例。

4.2.2.3. 可配置地址和队列设置

通常,您可以为 OpenShift Container Platform 上的代理部署配置的地址和队列设置 完全等同于 Linux 或 Windows 上的独立代理部署。但是,您应该注意,这些设置是如何配置的一些变化。这些区别在以下子小节中进行了描述。

  • 要为 OpenShift Container Platform 上的代理部署配置地址和队列设置,您需要将配置添加到代理部署的主自定义资源(CR)实例的 addressSettings 部分。这与 Linux 或 Windows 上的独立部署不同,您要在其中将配置添加到 broker.xml 配置文件中的 address-settings 元素中。
  • 用于配置项的名称的格式因 OpenShift Container Platform 和独立代理部署而异。对于 OpenShift Container Platform 部署,配置项目名称在 camel case 中,如 defaultQueueRoutingType。相反,独立部署的配置项目名称采用小写,并使用短划线(-)分隔符,如 default-queue-routing-type

    下表显示了此命名差异的一些其他示例。

    Expand
    表 4.2. 配置项名称的不同示例
    独立代理部署的配置项OpenShift 代理部署配置项

    address-full-policy

    addressFullPolicy

    auto-create-queues

    autoCreateQueues

    default-queue-routing-type

    defaultQueueRoutingType

    last-value-queue

    lastValueQueue

4.2.3. 删除地址和队列

根据您创建的地址和队列的方式,您可以通过删除 ActiveMQArtemis CR 中的 brokerProperties 条目,或使用 ActiveMQArtemisAddress CR 来删除地址和队列。

您可以通过从 brokerProperties 属性下的条目中删除条目来删除单个地址和队列。

先决条件

流程

  1. 为您的代理部署编辑 ActiveMQArtemis CR 实例。
  2. 添加以下 brokerProperties 条目,以允许代理删除任何地址,由数字符号(#)表示,以及它不再在 CR 中找到的相关队列。

    spec:
      ...
      brokerProperties:
      - addressSettings.#.configDeleteAddresses=FORCE
      - addressSettings.#.configDeleteQueues=FORCE
      ...
  3. brokerProperties 属性下,删除引用您要删除的地址和队列的所有行。例如,删除所有引用 usa-news 地址的行来删除此地址和队列:

    spec:
      ...
      brokerProperties:
      - addressConfigurations.usa-news.queueConfigs.usa-news-queue.routingType=MULTICAST
      - addressConfigurations.usa-news.queueConfigs.usa-news-queue.purgeOnNoConsumers=true
      - addressConfigurations.usa-news.queueConfigs.usa-news-queue.maxConsumers=20
      ...
  4. 保存 CR。

    当代理应用更新的配置时,它会删除您从 CR 中删除的地址和队列。

如果您在 CR 中创建地址和队列,您可以删除 ActiveMQArtemisAddress CR 中的地址和队列。

流程

  1. 确保您有一个带有详情的地址 CR 文件,如要删除的 地址和 队列的名称、addressNamequeueName。例如:

    apiVersion: broker.amq.io/v1beta1
    kind: ActiveMQArtemisAddress
    metadata:
        name: myAddressDeployment0
        namespace: myProject
    spec:
        ...
        addressName: myAddress0
        queueName: myQueue0
        routingType: anycast
        ...
  2. 在地址 CR 的 spec 部分中,添加 removeFromBrokerOnDelete 属性,并将它设为 true 的值。

    ..
    spec:
       addressName: myAddress1
       queueName: myQueue1
       routingType: anycast
       removeFromBrokerOnDelete: true

    removeFromBrokerOnDelete 属性设置为 true 会导致 Operator 在删除地址 CR 时删除部署中的所有代理的地址和任何关联消息。

  3. 应用更新的地址 CR,为您要删除的地址设置 removeFromBrokerOnDelete 属性。

    $ oc apply -f <path/to/address_custom_resource_instance>.yaml
  4. 删除地址 CR,以从部署中的代理中删除地址。

    $ oc delete -f <path/to/address_custom_resource_instance>.yaml
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2026 Red Hat
返回顶部