1. 死信队列
在RabbitMQ应该称为死信交换机
DLX:Dead Letter Exchange(死信交换机),当消息称为Dead message后会重新发到死信交换机中。
成为死信的三种情况
(1) 队列长度达到限制
(2) 在消费者手动ack中,basicNack/basicReject,并且不把消息重新放入原队列中,即requeue=false
(3) 原队列存在消息过期设置,消息超时后未被消费
实现方式不难,主要通过给队列设置相关参数即可:x-dead-letter-exchange和x-dead-letter-routing-key
其实把死信交换机看成正常交换机即可,生产者发送信息到交换机时,在direct和topic模式都需要指定交换机名称和路由key,那么死信交换机也是如此,也就是x-dead-letter-exchange和x-dead-letter-routing-key
这里直接贴图,因为队列设置参数比较简单,就在配置类中创建队列时设置即可。
需要注意的是成为死信的三种情况,分别测试,即可。
2. 延迟队列
延迟队列,即消息进入队列后不会立即被消费,只有到达指定时间,才会被消费
对应一些具体业务:订单未支付取消,规定时间后触发短信发送等
其实上述业务可以通过定时器实现,但是定时器实现不优雅,因为定时器轮询执行代码,时间间隔设置短影响性能,长则有延迟。
RabbitMQ中并未提供直接延迟队列功能
但是可以通过TTL+死信队列(交换机)完成实现
TTL的已在以往的博客介绍,死信队列就在前文已经描述了
1-8 (5). RabbitMQ高级特性-消费端限流和消息过期时间
博主的坚持 离不开大家评论和点赞,感谢大家支持!!!