4.8. 自动创建和删除地址和队列
您可以将代理配置为自动创建地址和队列,并在不再使用后删除它们。这样,您需要在客户端连接前预配置每个地址。
4.8.1. 用于自动队列创建和删除的配置选项
下表列出了配置 address-setting
元素时可用的配置元素,以自动创建和删除队列和地址。
如果您希望 address-setting 变为… | 添加此配置… |
---|---|
当客户端向或尝试使用映射到不存在的地址的队列的消息时,创建地址。 |
|
当客户端向队列发送消息或尝试使用队列的消息时,创建队列。 |
|
当它不再有任何队列时,删除自动创建的地址。 |
|
当队列有 0 个消费者和 0 消息时,删除自动创建的队列。 |
|
如果客户端没有指定,使用一个特定的路由类型。 |
|
4.8.2. 配置自动创建和删除地址和队列
以下流程演示了如何配置自动创建和删除地址和队列。
流程
-
打开 &
lt;broker_instance_dir> /etc/broker.xml
配置文件。 配置用于
自动创建和删除的地址设置
。以下示例使用上表中提到的所有配置元素。<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>
address-setting
-
address-setting
元素的配置将应用到与通配符地址activemq.
rhcs 匹配的任何地址或队列。 auto-create-addresses
- 当客户端请求连接到尚不存在的地址时,代理会创建该地址。
auto-delete-addresses
- 当自动创建的地址不再关联任何队列时,会删除自动创建的地址。
auto-create-queues
- 当客户端请求连接到尚不存在的队列时,代理会创建队列。
auto-delete-queues
- 当不再有任何消费者或消息时,自动创建的队列会被删除。
default-address-routing-type
-
如果客户端在连接时没有指定路由类型,代理会在向地址发送消息时使用
ANYCAST
。默认值为MULTICAST
。
其他资源
有关以下内容的更多信息:
- 配置地址时可以使用的通配符语法,请参阅 第 4.2 节 “将地址设置应用到一组地址”。
- 路由类型,请参阅 第 4.1 节 “地址、队列和路由类型”。
4.8.3. 协议管理器和地址
名为 协议管理器 的组件将特定于协议的概念映射到 AMQ Broker 地址模型中使用的概念;队列和路由类型。在某些情况下,协议管理器可能会在代理上自动创建队列。
例如,当客户端发送一个带有地址 /house/ room1/lights
和 /house/ room2/lights
的 MQTT 订阅数据包时,MQTT 协议管理器理解两个地址需要 多播
语义。因此,协议管理器首先会查找为这两个地址 启用多播
。如果没有,它将尝试动态创建它们。如果成功,协议管理器会为客户端请求的每个订阅创建特殊的订阅队列。
每个协议的行为稍有不同。下表描述了在请求对各种类型的 队列
订阅帧时通常会发生的情况。
如果队列是此类型… | 协议管理器的典型操作是 … |
---|---|
可配置订阅队列 |
查找适当的地址并确保启用了 特殊名称允许协议管理器快速识别客户端订阅队列,以便客户端稍后断开连接和重新连接。 当客户端取消订阅队列时,会删除队列。 |
临时订阅队列 |
查找适当的地址并确保启用了 当客户端断开队列被删除时。 |
点到点队列 |
查找适当的地址,并确保启用了 如果队列自动创建,则当没有消费者且没有消息后,它会被自动删除。 |