第八节 使用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目录贴

如果本系列文章对你有帮助,不妨请我喝瓶可乐吧!

你的打赏是对我最好的支持!

                    

posted @ 2022-07-17 12:12  小大宇  阅读(27)  评论(0编辑  收藏  举报