消息队列:RabbitMQ
同步

优点
- 时效性较强
缺点
- 耦合度高
- 性能和吞吐量低
- 等待过程中导致cpu等资源浪费
- 级联失败
异步

优点
- 耦合性低:新增微服务不用去改动支付服务里的代码
- 吞吐量大:支付服务不用刻意等待其他微服务的处理结果,全部交给Broker来代理
- 故障隔离:其他微服务的停止不会直接影响到支付服务
- 流量削峰:高并发请求会先缓存在Broker中,微服务可以根据自身能力从Broker中取
缺点
- 依赖于Broker的高可靠性、高吞吐量、安全性
- 架构复杂,业务流水线不好跟踪
如何选择
业务前后关联性较强,选择同步;若对吞吐量及并发要求较高,则选择异步
RabbitMQ
基本概念
- channel:操作MQ的工具(对象), Channel 作为轻量级的 Connection 极大的减少了操作系统建立 TCP Connection 的开销;
- exchange: 交换机,将消息路由到队列中
- queue:队列,存储数据
- virtualHost:虚拟主机,多租户概念,达到数据隔离的效果


安装部署
2、docker-compose.yml 配置文件
version: '3.7'
services:
rabbitmq:
image: rabbitmq:3.8.3-management
container_name: rabbitmq
ports:
- "4369:4369"
- "5671:5671"
- "5672:5672"
- "15671:15671"
- "15672:15672"
- "25672:25672"
restart: always
volumes:
- /data/rabbitmq/lib:/var/lib/rabbitmq
- /data/rabbitmq/etc:/etc/rabbitmq
- /data/rabbitmq/log:/var/log/rabbitmq
environment:
- RABBITMQ_DEFAULT_VHOST=rabbitmq-1
- RABBITMQ_DEFAULT_USER=admin
- RABBITMQ_DEFAULT_PASS=123456

3、docker启动rabbitmq后,默认是关闭web界面管理插件的,即无法访问1567端口
进入容器:rabbitmq-plugins enable rabbitmq_management
4、安装延迟队列插件
// 将插件文件复制到容器/plugins目录下
docker cp plugins/rabbitmq_delayed_message_exchange-3.8.9-0199d11c.ez rabbitmq:/plugins
// 查看插件是否存在
cd plugins
ls | grep delay
// 启动插件
rabbitmq-plugins enable rabbitmq_delayed_message_exchange
// 重启容器
docker restart rabbitmq
注:验证是否安装成功

工作模式

浙公网安备 33010602011771号