SpringBoot整合RabbitMQ之典型应用场景实战三
实战前言
RabbitMQ 作为目前应用相当广泛的消息中间件,在企业级应用、微服务应用中充当着重要的角色。特别是在一些典型的应用场景以及业务模块中具有重要的作用,比如业务服务模块解耦、异步通信、高并发限流、超时业务、数据延迟处理等。前两篇博文我介绍分享了RabbitMQ在业务服务模块异步解耦以及通信的实战业务场景,感兴趣童鞋可以前往观看:
1.https://www.roncoo.com/article/detail/134309
2.https://www.roncoo.com/article/detail/134312
这篇博文我们继续介绍分享RabbitMQ死信队列实战以及在支付系统中支付过程超时则自动失效其下单记录 这样的业务场景!
RabbitMQ 实战:死信队列认识与场景实战
死信队列认识
死信队列,又可以称之为“延迟/延时队列”,也是队列的一种,只不过与普通的队列最大的不同之处在于创建时的组成成分不同,创建死信队列的“成分”将不仅仅只是:名称、持久化、自动删除等基本属性,还包含了死信交换机、死信路由甚至还有TTL(Time-To-Live)即队列中消息可生存的时间。
死信队列其实最大的作用是可以实现消息或者数据延迟/延时处理,而且还可以动态的设定延迟的时间,即动态设定 TTL。典型的业务场景很多,在这里就不一一列举了,总之,凡是业务中需要延迟一定时间再处理的数据均可以将其压入死信队列中,等待一定的时间后再执行真正的处理逻辑!
下面是死信队列在创建、绑定、生产消息、消费消息过程的结构流程图,在这里其实已经很明确的指出死信队列的创建跟绑定逻辑 以及 真正监听消费处理消息的队列的绑定逻辑。图中问题的答案为:当入死信队列的消息TTL一到,它自然而然的将被路由到 死信交换机绑定的队列 中被真正消费处理!!!
死信队列场景实战
有了上面的流程图做指导,接下来,我们将用死信队列实战这样的一个业务场景:用户在商城下单成功并点击去支付后在指定时间未支付时自动失效!于是乎,我们需要创建两个消息模型,在 RabbitmqConfig 实施:
死信队列:用于设定指定的待支付的交易订单号在指定的 TTL(单位为 ms)后何去何从!
真正队列:用于监听消费处理指定的交易订单号,即判断该交易订单号是否已完成,如果否,则失效之!
接下来是我们的生产端的逻辑:用户商城下单的处理!
接下来是等待固定的 TTL:在这里设定的是 10s,当消息入死信队列 10s 后,将自然而然的将消息路由到下一个中转站,即真正的消费监听处理队列进行处理:判断该笔交易订单号是否已经付款,如果否,则失效之!
可以将该服务跑起来,然后发起 controller 的用户下单请求,会发现消息入死信队列后不会立马被消费,等待 10s 会,消息会被路由到真正的消费队列中进行处理,这一现象可以在 MQ 的后端控制台应用中看到!
总结:到此我们的死信队列已经实战完毕,回顾我们所介绍的历程,其实核心重点在于上面的那张 “死信队列的结构流程图”,理解了这个结构流程图中的相关组件及其流程,则在实战各种需要延时处理的业务场景将得心应手,包括如何创建死信队列,如何面向生产端绑定死信队列,如何面向消费端绑定真正的队列等等!而对于死信队列的实战场景,前面也介绍过了:凡是需要等待一定时间或者需要缓一缓特定时间的业务、数据均可以通过死信队列来实现!
可以将该服务跑起来,然后发起 controller 的用户下单请求,会发现消息入死信队列后不会立马被消费,等待 10s 会,消息会被路由到真正的消费队列中进行处理,这一现象可以在 MQ 的后端控制台应用中看到!
回顾与总结
RabbitMQ 的认识与实际业务场景的实战到此我都已经介绍完毕,总体而言,RabbitMQ 作为目前应用相当广泛的消息中间件,在我们实际系统的业务模块中具有重要的作用,特别是刚开始介绍的几种消息模型以及死信队列模型在微服务系统、分布式系统中均可充当重要的角色,其中我们实战的业务场景包括业务服务模块解耦异步通信(异步发送日志、异步发送邮件);另外,我们还介绍了消息确认机制,这是一种 MQ 确保消息能被消费者消费的机制,对于一些业务模块也是有广泛的应用;除此之外,我们还模拟实战了秒杀系统、抢单系统这样的业务场景下 RabbitMQ 的作用:限流、排队缓压、减少数据库读写锁的发生等等!
彩蛋:本博文介绍了RabbitMQ死信队列及其业务场景的实战,此业务场景其实适用于任何需要“延迟一定时间处理”的业务,包括本博文介绍的 “支付系统-用户下单点击去支付后超时仍未支付成功时则需要暂时失效其下单记录”!另外,博主已将RabbitMQ相关技术以及场景实战的相关要点录制成了视频教程,感兴趣小伙伴可以前往学习观看:https://www.roncoo.com/course/view/95ffac8bd3aa4f2d8a0d83c32f46c69d
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
大数据平台搭建(hadoop+spark)
一.基本信息 1. 服务器基本信息 主机名 ip地址 安装服务 spark-master 172.16.200.81 jdk、hadoop、spark、scala spark-slave01 172.16.200.82 jdk、hadoop、spark spark-slave02 172.16.200.83 jdk、hadoop、spark spark-slave03 172.16.200.84 jdk、hadoop、spark 2. 软件基本信息 软件名 版本 安装路径 oracle jdk 1.8.0_111 /usr/local/jdk1.8.0_111 hadoop 2.7.1 /usr/local/hadoop-2.7.3 spark 2.0.2 /usr/local/spark-2.0.2 scala 2.12.1 usr/local/2.12.1 3.环境变量汇总 #############java############ exportJAVA_HOME=/usr/local/jdk1.8.0_111 exportPATH=$JAVA_HOME/bin:$PATH exp...
- 下一篇
热门技术从零开始学Spring Cloud视频教程发布
使用技术 (1)spring boot,使用版本:1.5.8 (2)spring cloud,使用版本:Dalston.SR4 (3)Netflix Eureka (4)Netflix Ribbon (5)Feign (6)Netflix Hystrix (7)Spring Clou Config(Git/SVN/Local) (8)Netflix Zuul (9)Spring Cloud Bus 课程详情:https://www.roncoo.com/course/view/5460d828061b478082073e68f0ecca53 课程大纲 第1节Spring Cloud 概念 第2节Spring Cloud服务提供者与服务消费者 第3节Spring Cloud 服务发现与服务注册概念 第4节Spring Cloud 服务发现组件Eureka实现 第5节Spring Cloud 服务消费者(Ribbon) 第6节Spring Cloud 服务消费者(Feign) 第7节Spring Cloud 断路器(Ribbon) 第8节Spring Cloud 断路器(Feign) 第9...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- CentOS8编译安装MySQL8.0.19
- MySQL8.0.19开启GTID主从同步CentOS8
- SpringBoot2全家桶,快速入门学习开发网站教程
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- CentOS7,CentOS8安装Elasticsearch6.8.6
- CentOS8安装MyCat,轻松搞定数据库的读写分离、垂直分库、水平分库
- Red5直播服务器,属于Java语言的直播服务器