01-MQ概念
一、MQ概念
MessageQueue:消息队列
1.1、同步和异步通讯
- 微服务之间的通讯有同步和异步两种方式
- 同步通讯
- 就像打电话,需要实时响应
- 异步通讯
- 就像发邮件,不需要马上回复
- 同步通讯
- 如下图所示
1.2、同步通讯
- 像之前学习的Feign调用就属于同步通讯方式,虽然调用可以实时得到结果,但是存在如下问题
- 同步通讯的优缺点
- 优点
- 时效性强,可以立即得到结果
- 缺点
- 耦合度高
- 性能和吞吐能力下降
- 有额外的资源消耗
- 有级联失败问题
- 优点
1.3、异步通讯
- 异步调用则可以避免同步通讯的时候的问题
- 以购买商品为例
- 用户支付后需要调用订单服务完成订单状态修改
- 完成订单状态修改后,需要调用物流服务,从仓库分配响应的库存并准备发货
- 在事件模式中,支付服务的事件发布者(publisher),在支付完成后只需要发布一个支付成功的事件(event),事件中带上订单id
- 订单服务和物流服务是事件订阅者(consumer),订阅支付成功的事件,监听到事件后完成自己的业务即可
- 以购买商品为例
- 为了解除事件发布者与订阅者之间的耦合,两者并不是直接通信,而是有一个中间人(Broker)
- 发布者发布事件到Broker,不关心谁来订阅事件
- 订阅者从Broker订阅事件,不关心谁发来的消息
- Broker是一个像数据总线一样的东西,所有的服务要接收数据和发送数据都发到这个总线上,总线就如协议一般,让服务间的通讯变得标准和可控
- 异步通讯的优缺点
- 优点
- 吞吐量提升
- 无需等待订阅者处理完成
- 故障隔离
- 服务没有直接调用,不存在级联失败问题
- 调用间没有阻塞
- 不会造成无效的资源占用
- 耦合度低
- 每个服务都可以灵活插拔,可替换
- 流量削峰
- 不管发布事件的流量波动多大,都由Broker接收,订阅者可以按照自己的速度去处理事件
- 吞吐量提升
- 缺点
- 架构复杂
- 业务没有明显的流程线,不好管理
- 依赖Broker
- 需要依赖Broker的可靠、安全、性能
- 架构复杂
- 优点
- 不过现在开源软件或云平台上Broker的软件已经非常成熟了,比较常见的一种就是接下来要学习的MQ技术
1.4、MQ技术对比
-
MessageQueue(MQ)
- 消息队列,字面来看就是存放消息的队列(也就是事件驱动框架中的Broker)
-
比较常见的MQ实现
- ActiveMQ
- RabbitMQ
- RocketMQ
- Kafka
-
常见MQ的对比
-
RabbitMQ ActiveMQ RocketMQ Kafka 公司/社区 Rabbit Apache 啊里 Apache 开发语言 Erlang Java Java Scala&Java 协议支持 AMQP,XMPP,SMTP,STOMP OpenWire,STOMP,REST,XMPP,AMQP 自定义协议 自定义协议 可用性 高 一般 高 高 单机吞吐量 一般 差 高 非常高 消息延迟 微妙级 毫秒级 毫秒级 毫秒以内 消息可靠性 高 一般 高 一般
-
-
追求可用性
- Kafka、RocketMQ、RabbitMQ
-
追求可靠性
- RabbitMQ、RocketMQ
-
追求吞吐能力
- RocketMQ、Kafka
-
追求消息低延迟
- RabbitMQ、Kafka
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?