4.13.2. 自动创建死信队列
一个常见的用例是根据原始地址隔离未发送的消息。例如,您可以选择将名为 stocks
的地址取消发送的消息路由到名为 DLA.stocks
的死信队列,该队列名为 DLQ.stocks
。同样,您可能会将未发送的消息从名为 orders
的地址路由到名为 DLA.orders
的死信地址。
这种路由模式有助于轻松跟踪、检查和管理未发送的消息。但是,在主要自动创建的地址和队列的环境中很难实现此模式。对于这类环境的系统管理员可能不希望手动创建地址和队列来保存未发送的消息所需的额外工作。
作为解决方案,您可以将代理配置为自动创建地址查看和队列来处理未发送的消息,如以下步骤所示。
先决条件
- 您已为队列或一组队列配置了死信地址。如需更多信息,请参阅 第 4.13.1 节 “配置死信地址”。
步骤
-
打开
<broker-instance-dir>/etc/broker.xml
配置文件。 找到之前添加的
<address-setting>
元素,以定义匹配队列或一组队列的死信地址。例如:<configuration ...> <core ...> ... <address-settings> ... <address-setting match="exampleQueue"> <dead-letter-address>DLA</dead-letter-address> <max-delivery-attempts>3</max-delivery-attempts> </address-setting> ... <address-settings> <configuration ...>
在
<address-setting>
元素中,添加指示代理自动创建死信资源(即地址和队列)的配置项以及如何命名这些资源。例如:<configuration ...> <core ...> ... <address-settings> ... <address-setting match="exampleQueue"> <dead-letter-address>DLA</dead-letter-address> <max-delivery-attempts>3</max-delivery-attempts> <auto-create-dead-letter-resources>true</auto-create-dead-letter-resources> <dead-letter-queue-prefix>DLQ.</dead-letter-queue-prefix> <dead-letter-queue-suffix></dead-letter-queue-suffix> </address-setting> ... <address-settings> <configuration ...>
auto-create-dead-letter-resources
指定代理是否自动创建死信地址和队列来接收未发送的消息。默认值为:
false
。如果将
auto-create-dead-letter-resources
设置为true
,则代理会自动创建一个<address>
元素来定义死信地址和关联的死信队列。自动创建的<address>
元素的名称与您为<dead-letter-address>
指定的 name 值匹配。代理在自动创建的
<address>
元素中定义的死信队列具有多播路由
类型。默认情况下,代理命名死信队列,以匹配未发送的消息的原始地址,如库存
。代理还为死信队列定义过滤器,它使用
_AMQ_ORIG_ADDRESS
属性。此过滤器确保死信队列仅接收发送到对应原始地址的消息。dead-letter-queue-prefix
代理应用到自动创建的死信队列的名称的前缀。默认值为
DLQ。
当您定义前缀值或保留默认值时,死信队列的名称是前缀和原始地址(如
DLQ.stocks
)的串联。dead-letter-queue-suffix
- 代理应用到自动创建的死信队列的后缀。未定义默认值(即代理不应用后缀)。