主要是:解耦、异步、削峰。
(1) 解耦: 例如,生产系统A系统发送数据到B,C,D三个系统中,通过调用接口发送。如果E系统也需要这个消息呢?那如果C系统不需要这个消息了呢?A系统与其他的系统产生严重的耦合。如果使用MQ,A系统产生一条数据,发送到MQ中,哪个系统需要数据自己到MQ里面去消费。如果新系统需要数据直接从MQ里面消费即可;当某个系统不需要这条数据了,就取消读数据的消费即可。这样下来的话A系统压根不需要考虑要给谁发送数据,不需要维护这个代码,也不需要考虑其他系统是否调用成功,失败超时等情况。所以也不需要 直接同步调用接口的,因为MQ直接将它给异步解耦了。
没有使用MQ:
使用MQ之后:
(2)异步:A系统接收到一个请求,需要在自己的本地写库,还需要在B,C,D三个系统中写库,B,C,D三个系统写库完毕返回给用户。最终的请求总延时是A+B+C+D的时间,时间过长,导致用户体验不好。如果使用MQ,那么A系统直接发送3条消息到MQ消息队列中,那么A系统返回给用户的数据是A+MQ消耗2的时间,其他系统需要消费到MQ中进行再将数据写入到本地的库中。大大提升了用户的体验。
我们先看一下同步请求的弊端如下图所示
下面我们看一下使用MQ之后的示例图:
(3)削峰:减少高峰期对服务器的冲击压力。