1.初识MQ
在分布式微服务中,不同服务接口之间的调用分为同步调用和异步调用。
使用同步调用有几种问题
- 拓展性差
- 性能差
- 级联失败
因此在大部分场景,我们使用的都是异步调用。
异步调用方式其实就是基于消息通知的方式,一般包含三个角色:
- 消息发送者:投递消息的人,就是调用方
- 消息Broker:管理、暂存、转发消息,你可以把它理解成微信服务器
- 消息接收者:接收和处理消息的人,就是服务提供方
图中不难看出,Broker是实现异步调用的核心,异步调用完全依赖于Broker的可靠性,安全性和性能,我们在这里使用MQ(消息队列)来实现Broker。
2.RabbitMQ
目前国内常用的MQ实现方案为RabbitMQ,其官网地址为https://www.rabbitmq.com/ 有兴趣可以进去看看。
2.1安装RabbitMQ
在这里我们使用Docker安装RabbitMQ,运行以下命令即可
点击查看代码
docker run \
-e RABBITMQ_DEFAULT_USER=test \
-e RABBITMQ_DEFAULT_PASS=123321 \
-v mq-plugins:/plugins \
--name mq \
--hostname mq \
-p 15672:15672 \
-p 5672:5672 \
--network hm-net\
-d \
rabbitmq:3.8-management
安装完成后,我们访问 http://你安装RabbitMQ的ip地址:15672 即可看到管理控制台。首次访问需要登录,默认的用户名和密码在配置文件中已经指定了。
登录进去后如图所示:
RabbitMQ对应的架构如图:
其中包含几个概念:
- publisher:生产者,也就是发送消息的一方
- consumer:消费者,也就是消费消息的一方
- queue:队列,存储消息。生产者投递的消息会暂存在消息队列中,等待消费者处理
- exchange:交换机,负责消息路由。生产者发送的消息由交换机决定投递到哪个队列。
- virtual host:虚拟主机,起到数据隔离的作用。每个虚拟主机相互独立,有各自的exchange、queue
2.2RabbitMQ的五种模式
2.2.1简单模式
如图,简单模式中发布者直接将消息发步到消息队列中,消费者从消息队列中获取消息
2.2.2工作队列模式【Work Queues】
多个消费者都去获取消息队列中的消息,必然会有竞争关系,这种模式是能者多劳,简单来说就是执行效率快的消费者获取到的消息更多。
2.2.3发布订阅模式【Publish/Subscribe】
这种模式相当于群聊中的群发消息,发布者发布消息后最终消费者都能收到消息。
2.2.4路由模式【Routing】
这种模式可以理解为将消息私发给某个消费者。
2.2.5Topic模式【Topics】
这种模式与上一种类似,不过多了匹配规则,发布者只会将消息转发给规则匹配的消费者。
未完待续。。。。。。。。。。