4.13. 将未传送的消息移到死信地址
如果向客户端发送消息失败,您可能不希望代理不断尝试传递消息。为防止无限发送尝试,您可以定义一个 死信地址 以及一个或多个关联 死信队列。在尝试了指定次数后,代理会从原始队列中删除未传送的消息,并将消息发送到配置的死信地址。之后,系统管理员可以使用死信队列中未传送的消息来检查消息。
如果您没有为给定队列配置死信地址,代理会在指定传输尝试次数后从队列中永久删除未传送的消息。
从死信队列中消耗的未传送信息具有以下属性:
_AMQ_ORIG_ADDRESS
- 指定邮件原始地址的字符串属性
_AMQ_ORIG_QUEUE
- 指定消息原始队列的字符串属性
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
部分中应用的配置的地址。您可以为<address-setting>
元素的match
属性指定一个通配符表达式。如果要将<address-setting>
元素中配置的死信设置与匹配的地址 集 关联,可以使用通配符表达式。 dead-letter-address
- 死信地址的名称。在本例中,代理将未传送的消息从队列 exampleQueue 移动到死信地址 DLA。
max-delivery-attempts
-
代理在将未传送消息移至配置的死信地址前尝试的最大发送次数。在这个示例中,代理会在传送尝试失败后将未传送的消息移到死信地址。默认值为
10
。如果您希望代理进行无限数量的重新传送尝试,请将值指定为-1
。
在
address
部分中,为死信地址
DLA 添加 address 元素。若要将死信队列与死信地址关联,请为队列
指定名称值。例如:<configuration ...> <core ...> ... <addresses> <address name="DLA"> <anycast> <queue name="DLQ" /> </anycast> </address> ... </addresses> </core> </configuration>
在上述配置中,您将一个名为 DLQ 的死信队列与死信地址 DLA 关联。
其它资源
- 有关在地址设置中使用通配符的详情请参考 第 4.2 节 “将地址设置应用到一组地址”。