第八节 使用RabbitMQ异步解耦(提高性能)
一、基本思路
假设我们有一个"更新用户"的业务,此业务需要花费1秒钟时间。
然后需要为当前系统"记录日志",日志需要记录用户操作的方法名以及模块名称,此操作需要花费3秒。
上述两个步骤在同步情况下(主线程顺序执行)需要 1+3 = 4秒。如果将"记录日志"的操作从"更新用户"的业务中异步解耦出来,即"记录日志"交给消息中间件使用另外一个线程去操作,那么主线程仅仅需要处理"更新用户"的操作,理论上主线程执行完毕只需要1秒钟。
二、同步代码实现
同步实现的核心代码
从执行情况下来看,都是同一个线程,所以按照预期,系统共花费4秒中时间。
三、使用RabbitMQ异步解耦
首先是搭建一个基本的RabbitMQ环境,无非就是五个步骤。
1。配置RabbitMQ队列、路由器、路由键 的自定义名字。
2。配置RabbitMQ服务器地址
3。创建队列、路由器、及其它们的绑定关系
4。创建发送端
5。创建接收端
详细搭建可以参考本节源码,以及第六节 SSM框架集成RabbitMQ。
核心代码 与 运行效果 动图如下
总体执行效果,主线程nio-8080-exec-3共执行1秒,主线程不关心插入日志的操作是否完成。
插入日志系统由RabbitMQ服务器的tContainer#0-10线程进行。
两个线程之间互不干扰,这样就提高了我们应用程序的性能与效率。
下面是如何使用RabbitMQ服务器进行异步解耦的详细过程。
Controller核心代码如图,也就是说,我们构造的日志实体交给了RabbitMQ服务器。
RabbitMQ服务器将 日志实体发送给路由器,路由器会把日志实体投递到队列中。
将来,接收端会从队列中取这个日志实体数据。
接收端监听队列。它从队列中获取日志数据。实际做"记录日志"业务的是RabbitMQ的接收端。
源代码下载
源代码地址:https://github.com/hairdryre/Study_RabbitMQ
下一篇:第十节 死信队列
阅读更多:从头开始学RabbimtMQ目录贴
如果本系列文章对你有帮助,不妨请我喝瓶可乐吧!
你的打赏是对我最好的支持!