为什么要使用消息队列?

在实际的项目实践中,消息队列有的使用还是比较常用的,有时在想消息队列的好处是什么,使用MQ能带来什么好处。在说之前,目前市场主流的几种MQ(activeMQ,RabbitMQ,RocketMQ,Kafka),关于MQ的入门就不说了,可以找下教程,写个demo测试一下就好了,还是比较简单的。先上张图了解下每个MQ的区别

为什么要使用消息队列?

 使用消息队列主要起到解耦,异步,削峰的目的。

1、解耦:

就是一个系统或者一个模块,调用了多个系统或者模块,互相之间的调用很复杂,维护起来很麻烦。其实这个调用是不需要直接同步调用接口的,皆可以用MQ给他异步化解耦。

2、异步:

一个系统接收一个请求,需要在本地写库,还需要在另外几个相关的系统写库都需要一定的时长。最终请求总延时是就是三者的总时长,而当使用MQ异步请求,也就是两个时长,第一个是创建MQ,第二个是将消息放入MQ中,这样会大大提高效率。

3、削峰

可能每个系统的早高峰不一样,有些系统是上班期间访问量很大,有些系统是下班时间访问量大,所以,我们需要用MQ来降低并发请求到数据库的数据,给数据库一定的时间去处理,不然一起拥进到数据库,系统就会崩了。

通过几张图片可以清楚的了解到MQ的好处在什么地方,使用前:

为什么要使用消息队列?

 这张图很容易去理解,每次都需要A系统接需求去完成功能,而且A系统和其他系统之间耦合性太强了,这种情况下系统之间很容易存在问题。

使用MQ进行解耦:

为什么要使用消息队列?

 我在实际的项目工作当中,也在使用消息队列,使用消息队列的好处以及优势很明显,上面这张图也已经描述的非常清楚了。

通过图分析,可以得出如何去解耦。

异步:

未使用队列之前的业务流程:

为什么要使用消息队列?

使用后: 

为什么要使用消息队列?

如果A系统和其他几个系统进行直接调用,则每个系统进行业务进行,每个系统业务执行结束才可以归结为一次调用结束,但是这样的性能很低,响应时间很长,通过使用MQ的可以达到异步通知其他系统,A系统结束可以直接调用结束,响应时间变短,用户体验好。让其他系统去消费,使用每个技术都会使得项目复杂程度增加,都会存在问题,比如使用MQ会遇到什么问题,以及解决方案,以后博客会进行讲解。