搜索

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

download PDF

对于基于 Operator 的代理部署,您可以使用两个单独的自定义资源(CR)实例来配置地址和队列及其关联的设置。

  • 要在代理上创建地址和队列,您可以根据地址自定义资源定义(CRD)部署 CR 实例。

    • 如果您使用 OpenShift 命令行界面(CLI)安装 Operator,则地址 CRD 是您下载和提取的 Operator 安装存档的 deploy/crds 中的 broker_activemqartemisaddress_crd.yaml 文件。
    • 如果您使用 OperatorHub 安装 Operator,则地址 CRD 是 OpenShift Container Platform Web 控制台的 Administration Custom Resource Definitions 下列出的 ActiveMQArtemisAddress CRD。
  • 要配置与特定地址匹配的地址和队列设置,您可以在用于创建代理部署的主自定义资源(CR)实例中包含配置。

    • 如果使用 OpenShift CLI 安装 Operator,主代理 CRD 是 broker_activemqartemis_crd.yaml 文件,该文件包含在您下载和提取的 Operator 安装存档的 deploy/crds 中。
    • 如果您使用 OperatorHub 安装 Operator,则主要代理 CRD 是 OpenShift Container Platform Web 控制台的 Administration Custom Resource Definitions 下列出的 ActiveMQArtemis CRD。

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

4.2.1. OpenShift 和独立代理部署之间的地址和队列设置的不同

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

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

    独立代理部署配置项目OpenShift 代理部署配置项目

    address-full-policy

    addressFullPolicy

    auto-create-queues

    autoCreateQueues

    default-queue-routing-type

    defaultQueueRoutingType

    last-value-queue

    lastValueQueue

其他资源

4.2.2. 为基于 Operator 的代理部署创建地址和队列

以下流程演示了如何使用自定义资源(CR)实例将地址和相关队列添加到基于 Operator 的代理部署中。

注意

要在代理部署中创建多个地址和/或队列,您需要创建单独的 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 实例。在左侧窗格中,点 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
        ...

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

    注意

    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.3. 删除基于 Operator 的代理部署的地址和队列

以下流程演示了如何使用自定义资源(CR)实例从基于 Operator 的代理部署中删除地址和相关队列。

流程

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

    apiVersion: broker.amq.io/v1beta1
    kind: ActiveMQArtemisAddress
    metadata:
        name: myAddressDeployment0
        namespace: myProject
    spec:
        ...
        addressName: myAddress0
        queueName: myQueue0
        routingType: anycast
        ...
  2. 在 address 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

4.2.4. 在基于 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/v1beta1
    kind: ActiveMQArtemisAddress
    metadata:
      name: ex-aaoaddress
    spec:
      ...
      addressName: myDeadLetterAddress
      queueName: myDeadLetterQueue
      routingType: anycast
      ...

    前面的配置定义了名为 myDeadLetterAddress 的死信地址,它有一个名为 myDeadLetterQueue 的死信队列和 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. 编辑代理部署的主代理 CR 实例。

    1. 使用 OpenShift 命令行界面:

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

        $ oc login -u <user> -p <password> --server=<host:port>
      2. 编辑 CR。

         oc edit ActiveMQArtemis <CR instance name> -n <namespace>
    2. 使用 OpenShift Container Platform Web 控制台:

      1. 以具有特权在项目中为代理部署 CR 的用户登录到控制台。
      2. 在左侧窗格中,点 Operators Installed Operator
      3. Red Hat Integration - AMQ Broker for RHEL 8 (Multiarch) operator。
      4. AMQ Broker 选项卡。
      5. 单击 ActiveMQArtemis 实例名称的名称。
      6. YAML 标签。

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

        注意

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

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

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

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

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

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

    在上例中,如果代理进行五个失败尝试向以 myAddress 开头的地址发送消息,代理会将消息移到指定的死信地址 myDeadLetterAddress 中。

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

    spec:
      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:
      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. 保存 CR 实例。

其他资源

  • 要了解 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 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

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

© 2024 Red Hat, Inc.