开篇思考
- MQ 为什么在系统中使用?一定要在分布式系统中使用吗?
- MQ 有哪些中间件?他们有哪些特点?
- MQ 给系统带来好处的同时有没有带来什么问题?如何解决?
在阿里的面试中,面试官问到关于 MQ 的几个问题:
- 你的项目中 MQ 的作用?
- 为什么选择这款 MQ 作为消息中间件?
- 重复消费怎么办?
- 如何确保消息被消费?
- 有遇到其他问题吗?
那么接下来带着问题先思考下,有好的想法可以在评论区留言,大家一起分享。
消息中间件在系统中的使用
MQ 在系统中到底有哪些作用呢?抛开基本的消息发布订阅不说,还有以下几点:
- 分布式系统解耦
- 不需要立即返回的业务异步处理
- 削峰填谷,不直接访问服务,缓解服务压力,增加性能
- 日志记录
分布式系统解耦
在分布式系统中,要么是通过 rest 调用,要么是通过 dubbo 等 RPC 调用,但是有些场景需要解耦设计,不能直接调用。 比如消息驱动的系统中,消息发送者完成本地业务,发送消息,多平台的消息消费者服务需要收到推送的消息,然后继续处理其他业务。
看这两个架构图,第一种 BC 都直接依赖 A 服务,那么如果 A 中的接口修改,BC 都要跟着做修改,耦合度高。 第二种,通过 MQ 来作为中间件收发消息,BC 只依赖收到的消息而不是具体的接口,这样即使 A 服务修改或者增加其他服务,都只要订阅MQ就行。
不要