RabbitMQ - 死信队列
# 概念
在 RabbitMQ 中,死信队列本质上和普通队列没任何区别,同样需要绑定在交换机上,而死信队列绑定的交换机则为死信交换机,又或者说绑定在死信交换机的队列叫做死信队列。
笔记
死信交换机、死信队列都仅仅是一种约定,实际上还是普通的交换机,仅仅是约定了当业务队列出现问题时,将消息投递到配置的队列,而这个队列被约定叫死信队列。
# 配置
将需要使用死信队列的业务队列,配置如下参数:
x-dead-letter-exchange
:死信交换机的名称,必填x-dead-letter-routing-key
:投递到死信交换机时的 key,如果不填则使用消息原有的 key
# 触发
符合下述任意一个条件:
消费者使用
basic.reject
或basic.nack
时将requeue
参数设置为false
来否定消息。com.rabbitmq.client.Channel#basicNack(long deliveryTag, boolean multiple, boolean requeue); com.rabbitmq.client.Channel#basicReject(long deliveryTag, boolean requeue);
消息过期,即消息在 Queue 中存在的时间超过了设置的消息存活时间
详情参考:Time-To-Live and Expiration — RabbitMQ (opens new window)
消息重试次数超过 16 次,消息重试失败
超出队列长度
默认情况下,队列的长度视乎硬盘和内存情况。
# 参考资料
上次更新: 2024/03/11, 22:37:05