MQ-导读
什么是MQ?
MQ是一款消息中间件,通常被称为"消息队列",用于分布式架构中上下文的异步通信,
由三个角色组成:
1. 消息提供者:发送消息的人
2. 消息接收者:接收、处理消息的人
3. 消息代理者:负责存放消息、转发消息
举个例子
就拿登录来说,用户在登录的时候需要去进行一些其他的操作,比如风控、短信、记录日志,如果采用同步的方式,那么用户在远程调用其他服务的时候就需要去等待其他微服务完成然后返回数据,这种情况十分影响用户的体验,所以就需要用到MQ异步消息,用户登录完直接将消息发到MQ,然后又MQ去进行异步通知其他服务,用户登录这块就能够直接结束,无需做没用的等待。
MQ的学习路线
同步调用
拿支付订单来举例子,如果是同步的话,那么就代表着支付服务完成了然后要依次去调用其他的服务,当服务多的时候,计算每个服务耗时都很短,但是加起来之后时间就不短了,而且还容易出现一些其他的情况,比如有个微服务突然出问题了,被熔断降级了,那么这一整个微服务都无法被访问,而且扩展性差,如果需要其他的功能,比如积分、短信通知,都不断的要去修改主代码去扩展,不符合开闭原则,如果说使用MQ将状态直接保留下来,那么其他的扩展业务只需要从MQ拿到状态信息之类的,就可以实现扩展,不需要去修改主代码业务
异步调用
异步调用使我们的业务无需等待即可结束,无需上下级传递消息,只需要在业务完成后将信息存储到MQ服务器即可,其他的业务就负责监听MQ,减少了耦合性,双方都不知道对方的存在
技术选型
市面上比较常见的异步调用技术RabbitMQ、RocketMQ、Kafka这三种,RabbitMQ算是比较常见的,一般来说中小型公司使用的都是RabbitMQ,这个是Rabbit公司所开源的与其他的大厂不同的是,这个公司基本上就是只开发这一个产品,所以维护升级的频率比较高,以及互联网中一些常见的问题解决方案都比较多,虽然吞吐量不如大厂,但是能够保证消息的可靠性和适应能力,对不同的语言技术都能够支持