为什么需要消息队列
在说明什么是消息队列前,先来了解一下为什么需要使用消息队列,它解决了什么问题,不能为了用而用。
MQ 的应用场景有很多,耳熟能详的是的是:系统解耦、异步处理和流量削峰。除此之外,还有延迟通知、分布式事务、顺序消息、流式处理等等。
解耦
消息队列可以实现系统应用之间的解耦,那什么是解耦呢,先来看一个场景。
有一个系统A需要发送数据到BCD三个系统中,通过接口调用的方式,如下图
在平常开发中,我们会在A系统代码中调用BCD系统所提供的接口,当某日需求需要增加或者删除一个接口,那么我们需要增加或者删除相应的代码,如果需要频繁的修改,想到这种场景我的心态都要炸了。而且各种服务耦合在一起,不出现问题还好,一旦某个系统出现问题,就会影响整个业务流程,如果在相应的位置上进行try catch,那就相当于埋了颗炸弹,说不定什么时候,砰的一下就会被炸飞。
那使用消息队列后会怎样呢,来看下图
引入消息队列后,A系统将产生数据发送到MQ,当BCD系统需要使用A系统提供的数据时直接从MQ消费即可,如果新增或者删除系统时,不需要在修改A系统中的代码,直接从MQ消费或者取消消费即可,这样处理它不香吗。
异步处理
为了不影响用户的体验,系统需要尽可能快的响应给用户。试想一下,如果每次操作用户都需要等待1-2秒,那你这是在挑战用户,你当用户是Hello Kitty吗。如下图