4.13. 将未发送的消息移到死信地址
如果向客户端发送消息失败,您可能不希望代理不断尝试发送消息。为防止无限的尝试,您可以定义一个死信地址,以及一个或多个相关的死信队列。在指定的交付尝试后,代理会从其原始队列中删除未发送的消息,并将消息发送到配置的死信地址。系统管理员稍后可以从死信队列中消耗未发送的消息来检查消息。
如果您没有为给定队列配置死信地址,代理会在指定数量尝试后从队列永久删除未发送的消息。
取消发送从死信队列中消耗的消息具有以下属性:
_AMQ_ORIG_ADDRESS- 指定消息的原始地址的字符串属性
_AMQ_ORIG_QUEUE- 指定消息原始队列的字符串属性
4.13.1. 配置死信地址 复制链接链接已复制到粘贴板!
以下流程演示了如何配置死信地址和相关死信队列。
流程
-
打开 &
lt;broker_instance_dir> /etc/broker.xml配置文件。 在与
队列名称匹配的 <address-setting> 元素中,为死信地址名称和最大交付尝试数设置值。例如:Copy to Clipboard Copied! Toggle word wrap Toggle overflow match-
代理应用此
address-setting部分中的配置的地址。您可以为 <address-setting> 元素的match属性指定通配符表达式。如果您希望将<address-setting>项中配置的死信设置与一组地址相匹配,可以使用通配符表达式。 dead-letter-address- 死信地址的名称。在本例中,代理将未发送的消息从队列 exampleQueue 移到死信地址 DLA。
max-delivery-attempts-
在将未发送的消息移到配置的死信地址前,代理进行的最大交付尝试数量。在本例中,代理会在 3 次失败发送尝试后将未发送的消息移到死信地址。默认值为
10。如果您希望代理进行无限数量的重新发送尝试,请指定-1的值。
在
addresses部分中,为死信地址 DLA 添加address元素。要将死信队列与死信地址关联,请为队列指定名称值。例如:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
在前面的配置中,您要将名为 DLQ 的死信队列与死信地址 DLA 关联。
其他资源
- 有关在地址设置中使用通配符的详情,请参考 第 4.2 节 “将地址设置应用到一组地址”。
4.13.2. 自动创建死信队列 复制链接链接已复制到粘贴板!
常见用例是根据其原始地址隔离未发送的消息。例如,您可以选择将来自 stocks 的未被成功发送的消息路由到一个名为 DLA.stocks 的队列,它有一个相关的名为 DLQ.stocks 的死信队列。同样,您可以将未发送的消息从名为 orders 的地址路由到一个名为 DLA.orders的死信地址。
这种类型的路由模式可让您轻松跟踪、检查和管理未发送的消息。但是,这样的模式很难在使用主要自动创建的地址和队列的环境中实现。这可能不希望手动创建地址和队列来存放未发送的消息所需的额外工作。
作为临时解决方案,您可以将代理配置为自动创建地址和队列来处理未发送的消息,如下所示。
先决条件
- 您已为队列或一组队列配置了死信地址。更多信息请参阅 第 4.13.1 节 “配置死信地址”。
流程
-
打开 &
lt;broker_instance_dir> /etc/broker.xml配置文件。 找到您之前添加的 <
;address-setting> 元素,以便为匹配的队列或一组队列定义死信地址。例如:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在
<address-setting> 元素中,添加指示代理自动创建死信资源(即地址和队列)的配置项目以及如何命名这些资源。例如:Copy to Clipboard Copied! Toggle word wrap Toggle overflow auto-create-dead-letter-resources指定代理是否自动创建死信地址和队列来接收未发送的消息。默认值为
false。如果
auto-create-dead-letter-resources设置为true,则代理会自动创建一个 <address> 元素来定义死信地址和一个关联的死信队列。自动创建的 <address>元素的名称与您为 <dead-letter-address> 指定的值匹配。代理自动创建的 <
address> 元素中定义的死信队列具有multicast路由类型。默认情况下,代理命名死信队列以匹配未发送消息的原始地址,例如库存。代理还定义了使用
_AMQ_ORIG_ADDRESS属性的死信队列的过滤器。此过滤器可确保死信队列仅接收发送到相应原始地址的消息。dead-letter-queue-prefix代理应用到自动创建的死信队列的名称的前缀。默认值为
DLQ。当您定义前缀值或保留默认值时,死信队列的名称是前缀和原始地址的串联,如
DLQ.stocks。dead-letter-queue-suffix- 代理应用到自动创建的死信队列的后缀。未定义默认值(即代理不会应用后缀)。