什么是死信队列
一 什么是死信队列
当一条消息在队列中出现以下三种情况的时候,该消息就会变成一条死信。
消息被拒绝(basic.reject / basic.nack),并且 requeue = false
消息 TTL 过期
队列达到最大长度
当消息在一个队列中变成一个死信之后,如果配置了死信队列,它将被重新 publish 到死信交换机,死信交换机将死信投递到一个队列上,这个队列就是死信队列。
二 实现死信队列
2.1 原理图

2.2 创建消费者
创建一个消费者,绑定消费队列及死信交换机,交换机默认为direct
模型,死信交换机也是,arguments 绑定死信交换机和 key。(注解支持的具体参数文末会附上)
复制代码
2.3 创建生产者
复制代码
三 造成死信的三种情况
3.1 拒绝消息,并且禁止重新入队
设置 yml 为手动签收模式
复制代码
设置拒绝消息并禁止重新入队
复制代码
绑定死信队列
复制代码
3.2 消息 TTL 过期
绑定业务队列的时候,增加消息的过期时长,当消息过期后,消息将被转发到死信队列中。
复制代码
3.3 队列达到最大长度
设置消息队列长度,当队列中的消息达到最大长度后,继续发送消息,消息将被转发到死信队列中。
复制代码
四 Spring Boot 整合 RabbitMQ 用到的几个注解
@QueueBinding 作用就是将队列和交换机进行绑定,主要有以下三个参数:
复制代码
@Queue 是声明队列及队列的一些属性,主要参数如下:
复制代码
@Exchange 是声明交换及交换机的一些属性,
复制代码

版权声明: 本文为 InfoQ 作者【Java旅途】的原创文章。
原文链接:【http://xie.infoq.cn/article/1a2abe325cf63f3f8ac339ad8】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论