4.13. 将未发送的消息移到死信地址


如果向客户端发送消息失败,您可能不希望代理持续尝试传送消息。要防止无限交付尝试,您可以定义 死信地址 以及一个或多个 asscociated dead letter 队列。在指定数量的交付尝试后,代理会从原始队列中删除未发送的消息,并将消息发送到配置的死信地址。系统管理员以后可以使用无死信队列中的未发送消息来检查消息。

如果您没有为给定队列配置死信地址,代理会在指定数量的传送尝试后从队列中永久删除。

没有从死信队列消耗的消息具有以下属性:

_AMQ_ORIG_ADDRESS
指定消息原始地址的字符串属性
_AMQ_ORIG_QUEUE
指定消息原始队列的字符串属性

4.13.1. 配置死信地址

以下流程演示了如何配置死信地址和关联的死信队列。

步骤

  1. 打开 <broker-instance-dir>/etc/broker.xml 配置文件。
  2. 在与队列名称匹配的 <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
    死信地址的名称。在本例中,代理将未发送的消息从队列 示例Queue 移到 dead letter address DLA
    max-delivery-attempts
    代理发出的最大发送尝试次数,然后向配置的死信地址移动未发送的消息。在这个示例中,代理会在三出失败传送尝试后将未发送的消息移到死信地址。默认值为 10。如果您希望代理进行无限重新发送尝试,请指定 -1 值。
  3. address 部分中,为死信 地址 DLA 添加一个地址元素。要将死信队列与死信队列关联,请为 队列 指定一个 name 值。例如:

    <configuration ...>
       <core ...>
          ...
          <addresses>
             <address name="DLA">
                <anycast>
                   <queue name="DLQ" />
                </anycast>
             </address>
          ...
          </addresses>
       </core>
    </configuration>

在前面的配置中,您将名为 DLQ 的死信队列与死信地址 DLA 关联。

其他资源

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

© 2024 Red Hat, Inc.