更新时间:2025-07-14 GMT+08:00

配置RabbitMQ死信消息

死信是RabbitMQ中的一种消息机制,在消费消息时,如果队列里的消息符合以下任意一种情况,该消息将成为“死信”。

  • “requeue”被设置为“false”,消费者使用“basic.reject”或“basic.nack”否定应答(NACK)消息。
  • 消息在队列的存活时间超过设置的TTL时间。
  • 队列的消息数量已经超过最大队列长度。

死信消息会被RabbitMQ进行特殊处理,如果配置了死信队列,该消息将会被存储到死信队列中,如果没有配置死信队列,该消息将会被丢弃。

更多关于死信的说明,请参考Dead Letter Exchanges

在RabbitMQ中,使用死信可能会对性能产生负面影响,请慎用。

配置死信Exchange和Routing Key

您可以通过客户端或RabbitMQ控制台配置死信Exchange和Routing Key。

为队列配置死信Exchange,并在创建队列时指定“x-dead-letter-exchange”和“x-dead-letter-routing-key”参数。队列根据“x-dead-letter-exchange”将死信消息发送到死信Exchange中,并根据“x-dead-letter-routing-key”为死信消息设置死信路由Key。

以下示例演示在Java客户端配置死信交换机和路由:

channel.exchangeDeclare("some.exchange.name", "direct");

Map<String, Object> args = new HashMap<String, Object>();
args.put("x-dead-letter-exchange", "some.exchange.name");
args.put("x-dead-letter-routing-key", "some-routing-key");
channel.queueDeclare("myqueue", false, false, false, args);
  1. 参考创建RabbitMQ Queue创建队列,并在“死信交换器”中选择死信Exchange,“死信路由器”中输入死信Routing Key。

    图1 配置死信Exchange和Routing Key

  2. 在Queue列表中,单击新创建的队列后的“查看详情”,进入“查看详情”页面。

    当“死信交换器”和“死信路由键”为1中设置的信息时,表示死信Exchange和Routing Key配置成功。

    图2 查看队列详情