RocketMQ死信队列在实际业务场景中的运用-爱代码爱编程
一、先来了解一下啥是死信队列:
这篇博客,是基于大家有消息队列使用经验的同学,如果没有使用经验的,可以学习一下消息队列,主流的AMQ,RMQ,KAFKA等等
死信队列:没有被及时消费的消息存放的队列,消息没有被及时消费有以下几点原因:
a.消息被拒绝(basic.reject/ basic.nack)并且不再重新投递 requeue=false
b.TTL(time-to-live) 消息超时未消费
c.达到最大队列长度
消息变成死信后,会被重新投递(publish)到另一个交换机上(Exchange),这个交换机往往被称为DLX(dead-letter-exchange)“死信交换机”,然后交换机根据绑定规则转发到对应的队列上,监听该队列就可以被重新消费。
二、死信队列在实际业务场景中的运用:
有过电商订单业务开发经验的同学,应该会遇到以下的业务场景,当客人提交订单后,在规定的支付时限内,迟迟没有付款,在电商交易环节,提交订单,预示着预锁了库存,超时未支付,需要及时取消订单,释放库存。
如果订单库数据量特别庞大,实时捞取库中超时的订单,应该特别耗时,而且可能捞出来批量数据,很多技术大咖,立马想到了运用消息队列的死信队列来变通处理,框架图如下:
充分利用了消息队列的异步、解耦的特性,一切看起来这么顺畅,希望这个场景运用能给大家带来一丢丢的心灵的共鸣!