Skip to content

第一章 消息队列入门基础 v1.0 ​

消息队列是分布式系统中重要的组件,用于实现异步通信、解耦和流量削峰

第一部分 消息队列简介 ​

一、什么是消息队列 ​

消息队列(Message Queue,MQ)是一种进程间通信或同一进程的不同线程间的通信方式。MQ用于存放消息,也就是事件驱动架构中的Broker。消息发送后立即返回,由消息系统保证消息的可靠传递。

消息队列

二、同步通讯 ​

例:微服务间基于Feign的调用就属于同步方式

同步通讯

优点:时效性较强,可以立即得到结果

存在的问题:

  1. 耦合度高:每次加入新的需求,都要修改原来的代码
  2. 性能下降:调用者需要等待服务提供者响应,如果调用链过长则响应时间等于每次调用的时间之和。
  3. 资源浪费:调用链中每个服务在等待响应过程中,不释放请求占用的资源,高并发场景下极度浪费系统资源
  4. 级联失败:如果服务提供者出现问题,所有调用方都会跟着出问题,迅速导致整个微服务群故障

三、异步通讯 ​

异步通讯

事件驱动架构

优点:

  1. 耦合度低:服务解耦,服务之间耦合度小,更有利于业务的变更
  2. 性能提升,吞吐量提高
  3. 故障隔离:服务之间没有强依赖,不会出现级联失败问题
  4. 流量削峰

存在的问题:

  1. 依赖于Broker的可靠性、安全性、吞吐能力
  2. 架构复杂,业务没有明显的流程线,不好追踪管理

四、消息队列的作用 ​

  1. 异步处理:将耗时操作异步化,提高系统响应速度
  2. 系统解耦:降低系统间的耦合度
  3. 流量削峰:应对突发流量,保护后端系统
  4. 数据分发:实现数据的广播和分发

第二部分 常用消息队列 ​

一、RabbitMQ ​

RabbitMQ是使用Erlang语言开发的开源消息队列系统,支持多种消息协议。

二、Apache Kafka ​

Kafka是LinkedIn开源的分布式消息系统,具有高吞吐量、低延迟的特点。

三、RocketMQ ​

RocketMQ是阿里巴巴开源的分布式消息中间件,具有高可用、高可靠的特点。

第三部分 消息队列模型 ​

一、点对点模式 ​

消息生产者发送消息到队列,消息消费者从队列中取消息。一条消息只能被一个消费者消费。

二、发布/订阅模式 ​

消息生产者将消息发布到主题,所有订阅该主题的消费者都会收到消息。

第四部分 消息队列的使用场景 ​

一、异步处理 ​

用户注册后,发送注册邮件和注册短信。

二、系统解耦 ​

订单系统调用库存系统,通过消息队列解耦。

三、流量削峰 ​

秒杀活动,将请求放入消息队列,后端系统按照处理能力消费消息。