消息队列: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
注:验证是否安装成功
工作模式
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· AI与.NET技术实操系列(六):基于图像分类模型对图像进行分类
2023-01-11 hive中的表字段与预留关键字冲突
2023-01-11 MySQL中的group by字段理解
2023-01-11 hive中创建表时报错
2023-01-11 .xml文件中的&需要用&代替
2023-01-11 启动hive后,输入show databases;报错
2023-01-11 ERROR: JAVA_HOME is not set and could not be found.