MQ(Message Queue)是一个常用的消息中间件,在各种场景都能见到MQ的身影,其最主要的三个场景分别是异步、解耦、削峰。
异步:当一个交易的链路涉及多个系统的互相调用时,系统处理完毕,返回结果的时长会比较长,用户需要等待这一段时间才能看到结果,往往体验就比较差。这时我们就可以在系统中加入MQ,系统接受用户请求之后,直接将请求发送给MQ,然后返回结果给用户,响应很快,之后的其他的系统再从MQ中消费消息,完成整个流程。
解耦:如果多个系统需要从一个系统里面取需要的数据,最简单的写法就是将系统之间强耦合,各个系统调用提供数据系统的方法获取数据,但是这样拓展性很差,当获取数据的系统增加或者减少,不能动态完成,只能修改代码,并且提供数据系统还需要考虑到调用失败等问题。如果使用MQ的话,利用MQ的Pub/Sub(发布订阅)模型,数据提供者将数据放入MQ中,其他的系统从MQ中消费数据即可,起到了解耦的作用。
削峰:在很多的秒杀活动中,会存在瞬时流量暴增的场景,平时可能整个系统的QPS就只有几百,但是在活动的时候,QPS一下子增加到了几万,如果不限流的话,这么多的流量直接进入Mysql,就可