一、什么是消息中间件 (MQ)
全称MessageQueue,是在消息传输过程中保存消息的容器,主要用于程序和程序直接通信,异步和解耦。
二、MQ作用(使用场景)
解耦
没有使用MQ的场景
-
订单系统如果通过接口的形式将数据同步给库存系统、支付系统、物流系统,此时X系统也想要这个数据,订单系统就要修改代码,添加调用X系统的接口来同步数据,库存系统不想要这个数据了,订单系统又要修改代码,删除调用库存系统接口的代码。这样订单系统就和库存系统、支付系统、物流系统、X系统产生了耦合。 使用MQ的场景
-
如果用MQ的方式,订单系统只需要将同步的数据放在MQ里面,哪个系统想要这个数据,就去MQ队列里面去消费就可以了。
异步
没有使用MQ的场景
- 订单系统在本地操作执行了1个sql语句耗时20ms,又调用库存系统耗时300ms,调用支付系统耗时300ms,调用物流系统耗时300ms,这样一个接口下来要执行大概1秒钟。
使用MQ的场景
- 用MQ优化一下,订单系统在本地操作执行了1个sql语句耗时20ms,订单系统将消息放到MQ中耗时30ms,这样一个接口执行的时间就在50ms左右。
削峰
没有使用MQ的场景
- 接口请求量达到了5000/s,但是DB的处理能力有限,只能处理2000/s的请求。数据库是支撑不住这么大的并发量的。
使用MQ的场景
- 采用MQ的方式,先将请求放到MQ中,然后消费者慢慢的在MQ中消费请求,可以1000/s的速度处理,这样数据库也能很好的处理。
三、MQ的劣势
- 系统引入的外部依赖越多,系统的稳定性越差,一旦MQ宕机,就会对业务造成影响。
- MQ的加入增加了系统的复杂度,需要关注消息丢失,消息堆积,消息重复消费等问题。