实战前言
RabbitMQ 做为目前应用至关普遍的消息中间件,在企业级应用、微服务应用中充当着重要的角色。特别是在一些典型的应用场景以及业务模块中具备重要的做用,好比业务服务模块解耦、异步通讯、高并发限流、超时业务、数据延迟处理等。前两篇博文我介绍分享了RabbitMQ在业务服务模块异步解耦以及通讯的实战业务场景,感兴趣童鞋能够前往观看:
1.http://www.javashuo.com/article/p-rnbmlolo-do.html
2.http://www.javashuo.com/article/p-spfvphyl-dc.htmlhtml
这篇博文咱们继续介绍分享RabbitMQ死信队列实战以及在支付系统中支付过程超时则自动失效其下单记录 这样的业务场景!数据库
该课程的学习链接:http://edu.51cto.com/course/14858.html后端
RabbitMQ 实战:死信队列认识与场景实战微信
死信队列认识并发
死信队列,又能够称之为“延迟/延时队列”,也是队列的一种,只不过与普通的队列最大的不一样之处在于建立时的组成成分不一样,建立死信队列的“成分”将不单单只是:名称、持久化、自动删除等基本属性,还包含了死信交换机、死信路由甚至还有TTL(Time-To-Live)即队列中消息可生存的时间。异步
死信队列其实最大的做用是能够实现消息或者数据延迟/延时处理,并且还能够动态的设定延迟的时间,即动态设定 TTL。典型的业务场景不少,在这里就不一一列举了,总之,凡是业务中须要延迟必定时间再处理的数据都可以将其压入死信队列中,等待必定的时间后再执行真正的处理逻辑!分布式
下面是死信队列在建立、绑定、生产消息、消费消息过程的结构流程图,在这里其实已经很明确的指出死信队列的建立跟绑定逻辑 以及 真正监听消费处理消息的队列的绑定逻辑。图中问题的答案为:当入死信队列的消息TTL一到,它天然而然的将被路由到 死信交换机绑定的队列 中被真正消费处理!!!ide
死信队列场景实战微服务
有了上面的流程图作指导,接下来,咱们将用死信队列实战这样的一个业务场景:用户在商城下单成功并点击去支付后在指定时间未支付时自动失效!因而乎,咱们须要建立两个消息模型,在 RabbitmqConfig 实施:高并发
接下来是咱们的生产端的逻辑:用户商城下单的处理!
接下来是等待固定的 TTL:在这里设定的是 10s,当消息入死信队列 10s 后,将天然而然的将消息路由到下一个中转站,即真正的消费监听处理队列进行处理:判断该笔交易订单号是否已经付款,若是否,则失效之!
能够将该服务跑起来,而后发起 controller 的用户下单请求,会发现消息入死信队列后不会立马被消费,等待 10s 会,消息会被路由到真正的消费队列中进行处理,这一现象能够在 MQ 的后端控制台应用中看到!
总结:到此咱们的死信队列已经实战完毕,回顾咱们所介绍的历程,其实核心重点在于上面的那张 “死信队列的结构流程图”,理解了这个结构流程图中的相关组件及其流程,则在实战各类须要延时处理的业务场景将驾轻就熟,包括如何建立死信队列,如何面向生产端绑定死信队列,如何面向消费端绑定真正的队列等等!而对于死信队列的实战场景,前面也介绍过了:凡是须要等待必定时间或者须要缓一缓特定时间的业务、数据都可以经过死信队列来实现!
回顾与总结
RabbitMQ 的认识与实际业务场景的实战到此我都已经介绍完毕,整体而言,RabbitMQ 做为目前应用至关普遍的消息中间件,在咱们实际系统的业务模块中具备重要的做用,特别是刚开始介绍的几种消息模型以及死信队列模型在微服务系统、分布式系统中都可充当重要的角色,其中咱们实战的业务场景包括业务服务模块解耦异步通讯(异步发送日志、异步发送邮件);另外,咱们还介绍了消息确认机制,这是一种 MQ 确保消息能被消费者消费的机制,对于一些业务模块也是有普遍的应用;除此以外,咱们还模拟实战了秒杀系统、抢单系统这样的业务场景下 RabbitMQ 的做用:限流、排队缓压、减小数据库读写锁的发生等等!
彩蛋:本博文介绍了RabbitMQ死信队列及其业务场景的实战,相关源码数据库能够来这里下载!
地址:https://pan.baidu.com/s/1KUuz_eeFXOKF3XRMY2Jcew
学习过程有任何问题都可以与我交流,QQ:1974544863!感兴趣的童鞋能够关注一下个人微信公众号!
附注:debug已经将RabbitMQ的实战整理成了视频教程,感兴趣的童鞋能够加上面公众号或者我的QQ交流!