前文我们讲到了分布式事务可以通过MQ(消息队列)的半消息来实现,除此之外在分布式系统中我们大量的场景会用到MQ,比如微信朋友圈里你点赞一条信息,你的共同点赞的好友就会收到一个消息通知等。那么MQ都有哪些使用场景呢?
MQ 的作用
1.应用解耦
如图所示,第一种 B和C 都直接依赖 A 服务,那么如果 A 中的接口修改,B和C 都要跟着做修改,耦合度高。 第二种,通过 MQ 来作为中间件收发消息,B和C只依赖收到的消息而不是具体的接口,这样即使 A 服务修改或者增加其他服务,都只要订阅MQ就行。这样一来,应用是不是更解耦了?
2.异步处理
如图可见,我在 A 服务用户注册完成后,就直接返回了,这个时候 MQ 用来发送异步处理消息,B和C 服务分别处理。A 不用等待 B、C 的返回结果 ,这样用户体验就是只有 50ms 等待时间。而在邮件、短信这个阶段,因为网络延迟原因,用户可以接受一定时间的等待。这样通过异步处理的方式,就提高了系统的吞吐量。