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


4.2.1. 配置地址和队列

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

注意

AMQ Broker 7.12 中已弃用 ActiveMQArtemisAddress CR。

使用 brokerProperties配置地址和队列

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

先决条件

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

流程

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

    spec:
      ...
      brokerProperties:
      ...
    Copy to Clipboard Toggle word wrap
  3. 使用格式配置地址:

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

    例如:

    spec:
      ...
      brokerProperties:
      - addressConfigurations.usa-news-address.routingTypes=MULTICAST
      ...
    Copy to Clipboard Toggle word wrap
  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
      ...
    Copy to Clipboard Toggle word wrap
  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
      ...
    Copy to Clipboard Toggle word wrap
  6. 保存 CR。
  7. 通过查看 ActiveMQArtemis CR 的 status 部分,检查是否没有在 brokerProperties 配置中检测到任何错误。如需更多信息,请参阅 第 2.4 节 “配置不在自定义资源定义(CRD)中公开的项”

ActiveMQArtemisAddress CR 中配置地址和队列

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

先决条件

流程

  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. 单击 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
        ...
    Copy to Clipboard Toggle word wrap

    上述配置定义了名为 myAddress0 的地址,队列名为 myQueue0anycast 路由类型。

    注意

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

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

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

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

先决条件

使用 brokerProperties配置地址设置

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

    spec:
      ...
      brokerProperties:
      ...
      - addressConfigurations.usDeadLetter.routingTypes=MULTICAST
      - addressConfigurations.usDeadLetter.queueConfigs.usDeadLetter-queue.address=usDeadLetter
    Copy to Clipboard Toggle word wrap

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

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

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

      例如:

      spec:
        ...
        brokerProperties:
        ...
        - addressSettings.usa-news.deadLetterAddress=usDeadLetter
        - addressSettings.usa-news.maxDeliveryAttempts=5
        ...
      Copy to Clipboard Toggle word wrap

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

      spec:
        ...
        brokerProperties:
        ...
        - addressSettings."usa-news.*".deadLetterAddress=usDeadLetter
        - addressSettings."europe-news.#".deadLetterAddress=euDeadLetter
        ...
      Copy to Clipboard Toggle word wrap

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

    • 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)中公开的项”

通过在 ActiveMQArtemis CR 实例中使用 addressSettings 来配置地址设置

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

先决条件

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

addressName: myDeadLetterAddress
queueName: myDeadLetterQueue
routingType: anycast

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

流程

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

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

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

    注意

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

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

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

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

      spec:
        ...
        addressSettings:
          addressSetting:
          - match: myAddress
            deadLetterAddress: myDeadLetterAddress
            maxDeliveryAttempts: 5
      Copy to Clipboard Toggle word wrap
      deadLetterAddress
      代理发送未发送的消息的地址。
      maxDeliveryAttempts

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

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

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

      spec:
        ...
        addressSettings:
          addressSetting:
          - match: myAddress
            deadLetterAddress: myDeadLetterAddress
            maxDeliveryAttempts: 5
          - match: 'myOtherAddresses#'
            deadLetterAddress: myDeadLetterAddress
            maxDeliveryAttempts: 3
      Copy to Clipboard Toggle word wrap

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

      注意

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

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

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

    6. 保存 CR 实例。

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

通常,您可以为 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 来删除地址和队列。

删除使用代理 Properties 创建的地址和队列

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

先决条件

流程

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

    spec:
      ...
      brokerProperties:
      - addressSettings.#.configDeleteAddresses=FORCE
      - addressSettings.#.configDeleteQueues=FORCE
      ...
    Copy to Clipboard Toggle word wrap
  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
      ...
    Copy to Clipboard Toggle word wrap
  4. 保存 CR。

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

删除 ActiveMQArtemisAddress 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
        ...
    Copy to Clipboard Toggle word wrap
  2. 在地址 CR 的 spec 部分中,添加 removeFromBrokerOnDelete 属性,并将它设为 true 的值。

    ..
    spec:
       addressName: myAddress1
       queueName: myQueue1
       routingType: anycast
       removeFromBrokerOnDelete: true
    Copy to Clipboard Toggle word wrap

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

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

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

    $ oc delete -f <path/to/address_custom_resource_instance>.yaml
    Copy to Clipboard Toggle word wrap

其他资源

  • 要了解 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 中初始容器的更多信息,请参阅 OpenShift Container Platform 文档中的使用初始容器在部署 pod 前执行任务
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2025 Red Hat