死信队列/延迟队列
进入该队列的消息会被延迟消费。对于普通应用的以下场景,比如商城购物,点击支付后,监测支付状态,30分钟内未支付的系统取消订单,锁定的商品再次入库。传统方法是启动一个扫描线程,定时扫描未支付的订单,超过30分钟则进行对应的业务逻辑,使用延迟队列时,可以在用户点击支付后创建一条消息,延迟时间未30分钟,30分钟后该消息会被消费,在该消息的消费逻辑中判断用户是否已支付成功然后进行后面的逻辑处理。
主要组成部分:
- DLX, Dead Letter Exchange,死信交换机
- DLK, Dead Letter Routing-Key,死信路由
- TTL, Time To Live,存活时间,
工作原理:
可以将死信队列看作一个消息的暂存(该暂存区的消息不会被消费者获取),消息到达普通消息模型中(即普通队列的交换及和路由)后,按普通模型的流程,该消息会立即存入到指定的队列中等待消费者消费,但在死信队列模型中,该消息会进入到死信队列,该队列中的消息不会被消费者获取,消息进入死信队列后,TTL开始进行倒计时,存活时间一到,该消息则进入死信交换机,并根据路由立即被送到真正的消息队列,此时可被消费者获取并消费了。
简单的理解,就是在普通的消费模型中,在消息进入消费队列之前,增加了一个缓存区,消息可以在这个缓存区等待一段时间,然后在进入到真正可以被消费者侦听的消息队列中。