跳转至主要内容
版本: 5.0

领域模型

本节介绍 Apache RocketMQ 的领域模型。

Apache RocketMQ 是一款采用异步通信模型和发布/订阅消息传输模型的分布式中间件服务。

有关通信模型和传输模型的更多信息,请参阅通信模型消息传输模型

Apache RocketMQ 的异步通信模型具有系统拓扑简单、上下游耦合度低的特点。Apache RocketMQ 常用于异步解耦和削峰填谷场景。

Apache RocketMQ 领域模型

领域模型

如上图所示,Apache RocketMQ 消息的生命周期包含三个阶段:生产、存储和消费。

生产者生成消息并将其发送到 Apache RocketMQ Broker。消息存储在 Broker 的 Topic 中。消费者订阅该 Topic 以消费消息。

消息生产

生产者 (Producer)

用于在 Apache RocketMQ 中生成消息的运行实体。生产者是业务调用链路的上游部分。生产者是轻量级的、匿名的,且不具备身份标识。

消息存储

  • 主题 (Topic)

    Apache RocketMQ 中用于消息传输和存储的分组容器。一个 Topic 由多个消息队列组成,用于存储消息并实现 Topic 的横向扩展。

  • 消息队列 (MessageQueue)

    Apache RocketMQ 中用于消息传输和存储的单元容器。消息队列类似于 Kafka 中的分区(Partition)。Apache RocketMQ 基于无限队列结构以流式方式存储消息。消息在队列中按顺序存储。

  • 消息 (Message)

    Apache RocketMQ 中数据传输的最小单元。消息在初始化和存储后是不可变的。

消息消费

  • 消费者组 (ConsumerGroup)

    Apache RocketMQ 发布/订阅模型中定义的独立消费身份组。消费者组用于集中管理底层运行的消费者。同一组内的消费者必须保持相同的消费逻辑和配置,共同消费组内订阅的消息,以扩展该组的消费能力。

  • 消费者 (Consumer)

    用于在 Apache RocketMQ 中消费消息的运行实体。消费者是业务调用链路的下游部分,消费者必须属于特定的消费者组。

  • 订阅 (Subscription)

    Apache RocketMQ 发布/订阅模型中的配置集合。这些配置包括消息过滤、重试和消费进度。订阅在消费者组级别进行管理。通过消费者组指定订阅,可以管理组内消费者如何过滤消息、重试消费以及恢复消费位点。

    除过滤表达式外,Apache RocketMQ 订阅中的所有配置都是持久化的。无论 Broker 重启还是连接关闭,订阅状态始终保持不变。

通信模型

根据分布式系统架构的概念,一个复杂的系统可以拆分为多个独立的模块(例如微服务模块)。系统必须确保模块之间的远程通信。为此,有两种典型的通信模型:基于 RPC 的同步通信模型和基于中间件的异步通信模型。

基于 RPC 的同步模型

Synchronous invocation

在此模型中,远程系统直接相互通信。每个请求都直接从调用方发送给被调用方,被调用方立即将调用结果返回给调用方。注意:“同步”一词并不指代编程接口的模式。RPC 也支持异步非阻塞调用的编程模式,在这种情况下,调用方仍然期望在指定的时间内从被调用方得到直接响应。

异步通信模型 异步调用

在此模型中,子系统之间不是紧密耦合的。调用方只需将请求转换为异步事件(或消息),并将其发送给代理(Agent)。只要消息发送成功,调用即被视为完成。代理将消息传递给下游被调用子系统,并确保任务完成。代理的角色通常由消息中间件承担。

异步通信具有以下优势:

  • 系统拓扑简单。由于调用方和被调用方都只与代理通信,系统以星型结构运行,易于维护和管理。
  • 上下游耦合度低。弱耦合使系统结构更加灵活。代理执行缓冲和异步恢复。部署在上下游的系统可以独立升级和变更,互不影响。
  • 削峰填谷。面向消息的代理通常提供较大的流量缓冲区和强大的流量整形能力,防止流量峰值击垮下游系统。

消息传输模型

消息中间件服务有两种常见的传输模型:点对点模型和发布/订阅模型。

点对点模型 点对点模型

点对点模型(也称为队列模型)具有以下特点:

  • 消费者匿名性:队列是上下游通信期间使用的唯一身份标识。下游消费者在从队列获取消息时无法声明身份。

  • 一对一通信:消费者没有身份标识。消费者组中的所有消费者共同消费订阅的消息。每条消息只能被一个特定的消费者消费。因此,该模型仅支持一对一通信。

发布/订阅模型 发布/订阅模型

该模型具有以下特点:

  • 独立消费:在此模型中,消费者使用消费者组或订阅的身份来接收和消费消息。消费者组之间相互独立。

  • 一对多通信:基于独立身份的设计,该模型允许一个 Topic 被多个消费者组订阅,每个消费者组都可以完整访问所有消息。因此,发布/订阅模型支持一对多通信。

传输模型比较

点对点模型的结构更简单,而发布/订阅模型提供了更好的可扩展性。Apache RocketMQ 使用的是发布/订阅模型,并具备同样的高可扩展性。