4.8. 自动创建和删除地址和队列


您可以将代理配置为自动创建地址和队列,并在不再使用后删除它们。这会使您不必在客户端连接到每个地址前预配置每个地址。

4.8.1. 用于自动队列创建和删除的配置选项

下表列出了在配置 address-setting 元素时可用的配置元素,以自动创建和删除队列和地址。

Expand
表 4.3. 自动创建和删除队列和地址的配置元素
如果您希望 address-setting to…​添加此配置…​

当客户端向或试图使用映射到不存在的地址的队列中的消息时,创建地址。

auto-create-addresses

当客户端向队列发送消息或尝试使用队列的消息时,创建队列。

auto-create-queues

当它不再有任何队列时,删除自动创建的地址。

auto-delete-addresses

当队列有 0 个消费者和 0 消息时,删除自动创建的队列。

auto-delete-queues

如果客户端没有指定,使用一个特定的路由类型。

default-address-routing-type

4.8.2. 配置自动创建和删除地址和队列

以下流程演示了如何配置自动创建和删除地址和队列。

流程

  1. 打开 & lt;broker_instance_dir> /etc/broker.xml 配置文件。
  2. 配置 address-setting 以自动创建和删除。以下示例使用上表中提到的所有配置元素。

    <configuration ...>
     <core ...>
      ...
      <address-settings>
        <address-setting match="activemq.#">
          <auto-create-addresses>true</auto-create-addresses>
          <auto-delete-addresses>true</auto-delete-addresses>
          <auto-create-queues>true</auto-create-queues>
          <auto-delete-queues>true</auto-delete-queues>
          <default-address-routing-type>ANYCAST</default-address-routing-type>
        </address-setting>
      </address-settings>
      ...
     </core>
    </configuration>
    Copy to Clipboard Toggle word wrap
    address-setting
    address-setting 元素的配置应用于与通配符地址 activemq. " 匹配的任何地址或队列。
    auto-create-addresses
    当客户端请求连接到尚不存在的地址时,代理会创建地址。
    auto-delete-addresses
    当它不再关联任何队列时,会自动创建的地址。
    auto-create-queues
    当客户端请求连接到尚不存在的队列时,代理会创建队列。
    auto-delete-queues
    当一个自动创建的队列不再包含任何消费者或消息时,会删除它。
    default-address-routing-type
    如果客户端在连接时没有指定路由类型,代理会在向地址发送消息时使用 ANYCAST。默认值为 MULTICAST

其他资源

4.8.3. 协议管理器和地址

称为 协议管理器 的组件将特定于协议的概念映射到 AMQ Broker 地址模型中使用的概念;队列和路由类型。在某些情况下,协议管理器可能会在代理上自动创建队列。

例如,当客户端发送地址 /house/room1/lights/house/room2/lights 的 MQTT 订阅数据包时,MQTT 协议管理器可以理解这两个地址需要 多播 语义。因此,协议管理器首先会查找两个地址都启用了 多播。如果没有,它会尝试动态创建它们。如果成功,协议管理器会为客户端请求的每个订阅创建特殊的订阅队列。

每个协议的行为稍有不同。下表描述了当请求各种类型的 队列时,通常会发生什么情况。

Expand
表 4.4. 不同队列类型的协议管理器操作
如果队列是这个类型…​协议管理器的典型操作是 …​

持久化订阅队列

查找适当的地址,并确保 启用多播 语义。然后,它会创建一个特殊的订阅队列,客户端 ID 和地址作为其名称,multicast 作为路由类型。

特殊名称允许协议管理器快速识别所需的客户端订阅队列,客户端在以后断开连接并重新连接。

当客户端取消订阅队列时。

临时订阅队列

查找适当的地址,并确保 启用多播 语义。然后,它使用 多播 路由类型在此地址下创建一个随机(读取 UUID)名称的队列。

当客户端断开队列时。

point-to-point 队列

查找适当的地址,并确保启用了 anycast 路由类型。如果是,它旨在查找名称与地址相同的队列。如果不存在,它将查找第一个可用的队列。它不存在,它会自动创建队列(启用提供自动创建)。队列使用者绑定到此队列。

如果自动创建队列,则在没有消费者且没有消息后自动删除。

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2025 Red Hat