当前位置: 首页 > news >正文

初识 MQ:从同步到异步,聊聊消息队列那些事

初识 MQ(消息队列):从同步到异步,聊聊消息队列那些事

一、同步调用:简单但耦合

1.1 什么是同步调用?

同步调用意味着 调用方需要等待被调用方返回结果,才能继续往下执行。
例如:

用户下单 → 调用库存服务扣库存 → 调用支付服务支付 → 返回下单结果

整个流程是串行的,只要其中一个环节卡住(如库存服务响应慢),整个调用链都会被阻塞。

1.2 同步调用的弊端

✅ 简单易实现,易于调试。
✅ 时效性强,等待到结果后才返回
耦合度高,服务之间强依赖。
容错能力差,某个服务挂了可能会影响整条链路。
性能瓶颈明显,不适合高并发场景。
拓展性差
性能下降
级联失败

二、异步调用:解耦、提速、削峰

2.1 什么是异步调用?

异步调用通过消息队列来实现,调用方 发送消息到队列 后就可以立刻返回,由消费者服务 异步处理消息

在这里插入图片描述
三个角色:

  • 消息发送者:投递消息的人,就是原来的调用方
  • 消息Broker:管理、暂存、转发消息
  • 消息接收者:接收和处理消息的人,就是原来的服务提供方
    在这里插入图片描述

2.2 异步调用的优势

解耦合,拓展性好:服务之间不再直接调用,互不影响。
高性能:,无需等待响应速度快,吞吐量大。
容错性强:消费者服务可独立处理失败重试。
支持广播、延迟、定时等高级功能
故障隔离
✅ 缓存消息,流量削峰填谷

2.3 异步调用的挑战

❌ 实现复杂度高。
❌ 消息可靠性(丢失、重复)需特别处理。
❌ 引入额外组件(如 MQ 中间件)增加运维成本。

三、技术选型:主流 MQ 对比

名称开发语言公司协议支持特点描述适用场景
RabbitMQErlang(面向并发)RabbitAMQP,XMPP,SMTP,STOMP轻量级、易上手、插件丰富、AMQP协议小中型项目、快速开发
RocketMQJava阿里自定义协议高性能、支持顺序消息、事务消息、轻量分布式部署金融、电商等高并发场景
KafkaScala&JavaApache自定义协议高吞吐、分布式日志系统、偏向于数据流处理大数据处理、日志系统
ActiveMQJavaApacheOpenWire,STOMP,REST,XMPP,AMQP较老牌,功能全,但性能不如其他新一代 MQ老项目、轻量应用
  • 追求可用性:Kafka、 RocketMQ 、RabbitMQ
  • 追求可靠性:RabbitMQ、RocketMQ
  • 追求吞吐能力:RocketMQ、Kafka
  • 追求消息低延迟:RabbitMQ、Kafka
http://www.dtcms.com/a/318895.html

相关文章:

  • OpenCv对图片视频的简单操作
  • 深度学习(2):自动微分
  • 学深度学习,有什么好的建议或推荐的书籍?
  • MobileNetV3: 高效移动端深度学习的前沿实现
  • 从“炼金术”到“工程学”:深度学习十年范式变迁与未来十年路线图
  • 深度学习之opencv篇
  • HashMap寻址算法
  • QT项目 -仿QQ音乐的音乐播放器(第五节)
  • 《算法导论》第 10 章 - 基本数据结构
  • 深入剖析Java线程:从基础到实战(上)
  • ubuntu cloud init 20.04LTS升级到22.04LTS
  • vue3接收SSE流数据进行实时渲染日志
  • Web开发模式 前端渲染 后端渲染 身份认证
  • 第三章:【springboot】框架介绍MyBatis
  • Spring AOP动态代理核心原理深度解析 - 图解+实战揭秘Java代理设计模式
  • 前端百分比展示导致后端 BigDecimal 转换异常的排查与解决
  • 多账号管理方案:解析一款免Root的App分身工具
  • 【RabbitMQ面试精讲 Day 13】HAProxy与负载均衡配置
  • HTTP 协议升级(HTTP Upgrade)机制
  • winform中的listbox实现拖拽功能
  • 基于ubuntu搭建gitlab
  • KDE Connect
  • 一篇文章入门TCP与UDP(保姆级别)
  • 02电气设计-安全继电器电路设计(让电路等级达到P4的安全等级)
  • C语言strncmp函数详解:安全比较字符串的实用工具
  • 合约收款方式,转账与问题安全
  • 怎么进行专项分析项目?
  • 上证50期权持仓明细在哪里查询?
  • C语言(08)——整数浮点数在内存中的存储
  • LINUX-批量文件管理及vim文件编辑器