中间件消息队列的笔记 | 青训营

133 阅读3分钟

消息队列(Message Queue,简称MQ),指保存消息的一个容器,本质是个队列。 消息(Message)是指在应用之间传送的数据,消息可以非常简单,比如只包含文本字符串,也可以更复杂,可能包含嵌入对象。

消息队列MQ应用场景

  • 异步处理 消息队列的主要特点是异步处理,主要目的是减少请求响应时间,实现非核心流程异步化,提高系统响应性能。
  • 应用解耦 使用了消息队列后,只要保证消息格式不变,消息的发送方和接收方并不需要彼此联系,也不需要受对方的影响,即解耦。
  • 流量削锋 流量削锋也是消息队列中的常用场景,一般在秒杀或团抢活动中使用广泛。 这种场景中系统的峰值流量往往集中于一小段时间内,所以为了防止系统在短时间内的峰值流量冲垮,往往采用消息队列来削弱峰值流量,相当于消息队列做了一次缓冲。
  • 日志处理 日志处理是指将消息队列用在日志处理中,比如Kafka的应用,解决大量日志传输的问题。

消息队列MQ设计

整体架构

涉及三类角色:

  • Producer 消息生产者:负责产生和发送消息到 Broker;
  • Broker 消息处理中心:负责消息存储、确认、重试等,一般其中会包含多个 queue;
  • Consumer 消息消费者:负责从 Broker 中获取消息,并进行相应处理;

详细设计

  • RPC 通信
  • Broker存储
  • 消费模型
  • 高级特性

消息队列MQ模型

消息队列MQ主要包含两种模型:点对点与发布订阅两种模型。

点对点模型

点对点模用于 消息生产者 和 消息消费者 之间 点到点 的通信,包含三个角色:

  • 消息队列(Queue)
  • 发送者(Sender)
  • 接收者(Receiver) 每个消息都被发送到一个特定的队列,接收者从队列中获取消息。队列保留着消息,可以放在 内存 中也可以 持久化,直到他们被消费或超时。 特点 每个消息只有一个消费者(Consumer)(即一旦被消费,消息就不再在消息队列中) 发送者和接收者之间在时间上没有依赖性 接收者在成功接收消息之后需向队列应答成功

发布订阅消息模型Topic

发布订阅模型包含三个角色:

  • 主题(Topic)
  • 发布者(Publisher)
  • 订阅者(Subscriber) 多个发布者将消息发送到Topic,系统将这些消息传递给多个订阅者。 特点 每个消息可以有多个消费者:和点对点方式不同,发布消息可以被所有订阅者消费 发布者和订阅者之间有时间上的依赖性。 针对某个主题(Topic)的订阅者,它必须创建一个订阅者之后,才能消费发布者的消息。 为了消费消息,订阅者必须保持运行的状态。