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
posted @   OnlyOnYourself-Lzw  阅读(147)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示