文章目录
总结来源B站黑马程序员
TTL
java
TTL
TTL(Time To Live):存活时间/过期时间
当信息到达存活时间后,还没有被消费,会被自动清除。
RabbitMQ可以对消息设置过期时间,也可以对整个队列(Queue)设置过期时间
死信队列
java
DLX(Dead Letter Exchange):死信交换机,
当消息成为Dead Message后,可以被重新发送到另一个交换机,这个交换机就是DLX
死信队列原理:
当给正常的队列设置过期时间后,在这个过期时间内消息没有被消费的消息会被丢弃,
但如果这个正常的队列绑定了一个死信交换机,那么队列里过期没有被消费的消息将不会直接被丢弃而是被直接发送给死信交换机
死信交换机再将过期的信息发送给其他的队列(死信队列),从而过期的消息又可以被重新消费了。
消息成为死信的三种情况
java
死信的三种情况
1.队列消息长度达到限制
2.消费者拒绝消费消息,basicNack/basicReject并且不把消息重新放入原目标队列,requeue=false
3.原队列存在消息过期设置,消息到达超时时间未被消费。
队列如何绑定死信交换机
java
队列绑定死信交换机
给对垒设置参数:x-dead-letter-exchage和x-dead-letter-routing-key
延迟队列
java
延迟队列:
即消息进入队列后不会立即被消费,只有到达指定时间(过期时间TTL)后,才会被消费。
需求场景:
1.下单后,30分钟未支付,取消订单,回滚库存
2.新用户注册成功7天后,发送消息问候。
RabbitMQ如何实现延迟队列
java
RabbitMQ本身并未直接提供延迟队列的功能。
但我们可以将"TTL"+"死信队列"的组合方式实现延迟队列的效果.