1 领域模型
Apache RocketMQ 是一款典型的分布式架构下的消息中间件产品,使用异步通信方式和发布订阅的消息传输模型。 Apache RocketMQ 产品具备异步通信的优势,系统拓扑简单、上下游耦合较弱,主要应用于异步解耦,流量削峰填谷等场景。
说明:以上图片来自官网
如上,RocketMQ 中消息的生命周期主要分为消息生产、消息存储、消息消费这三部分:
- 生产者生产消息并发送至 Apache RocketMQ 服务端
- 消息被存储在服务端的主题中
- 消费者通过订阅主题消费消息
1.1 消息生产
生产者(Producer):RocketMQ 中用于产生消息的运行实体,一般集成于业务调用链路的上游。
1.2 消息存储
- 主题(Topic):RocketMQ 消息传输和存储的分组容器,主题内部由多个队列组成,消息的存储和水平扩展实际是通过主题内的队列实现的。
- 队列(MessageQueue):RocketMQ 消息传输和存储的实际单元容器,类比于其他消息队列中的分区,流式顺序性存储特征。
- 消息(Message): RocketMQ 的最小传输单元。消息具备不可变性,在初始化发送和完成存储后即不可变。
1.3 消息消费
-
消费者分组(ConsumerGroup):
Apache RocketMQ 发布订阅模型中定义的独立的消费身份分组,用于统一管理底层运行的多个消费者(Consumer)。同一个消费组的多个消费者必须保持消费逻辑和配置一致,共同分担该消费组订阅的消息,实现消费能力的水平扩展。
-
消费者(Consumer):
Apache RocketMQ 消费消息的运行实体,一般集成在业务调用链路的下游。消费者必须被指定到某一个消费组中。
-
订阅关系(Subscription):
Apache RocketMQ 发布订阅模型中消息过滤、重试、消费进度的规则配置。订阅关系以消费组粒度进行管理,消费组通过定义订阅关系控制指定消费组下的消费者如何实现消息过滤、消费重试及消费进度恢复等。
RocketMQ 的订阅关系除过滤表达式之外都是持久化的,即服务端重启或请求断开,订阅关系依然保留。
2 通信方式介绍
分布式系统架构思想下,将复杂系统拆分为多个独立的子模块,例如微服务模块。此时就需要考虑子模块间的远程通信,典型的通信模式分为以下两种,一种是同步的RPC远程调用;一种是基于中间件代理的异步通信方式。
2.1 同步RPC调用模型
同步RPC调用模型下,不同系统之间直接进行调用通信,每个请求直接从调用方发送到被调用方,然后要求被调用方立即返回响应结果给调用方,以确定本次调用结果是否成功。
2.2 异步通信模型
异步消息通信模式下,各子系统之间无需强耦合直接连接,调用方只需要将请求转化成异步事件(消息)发送给中间代理,发送成功即可认为该异步链路调用完成,中间件会确保任务执行完成。他有如下优势:
- 系统拓扑简单:统一的中间代理通信,系统是星型结构,易于维护和管理。
- 上下游解耦 :上下游可以独立升级和变更,不会互相影响。
- 容量削峰填谷:避免高峰带来过载
3 消息传输模型介绍
主流的消息中间件的传输模型主要为点对点模型和发布订阅模型,RocketMQ也不例外。
3.1 对点模式(Point To Point)
在点对点模式下,每个消息只能被一个消费者消费,一旦消息被消费,它就会从队列中删除。这种模式下,消息的生产者和消费者之间没有依赖性,生产者发送消息后,无论是否有消费者接收,都不会影响下一次发送消息。点对点模式适用于需要确保每条消息只被消费一次的场景,例如订单处理、支付确认等。
3.2 发布订阅模式(BroadCast)
在发布订阅模式下,每个消息可以被多个消费者消费。消息生产者将消息发布到主题(Topic)上,所有订阅该主题的消费者都能接收到这条消息。这种模式下,生产者不需要关心有多少消费者,只需要发送消息即可。发布订阅模式适用于需要广播消息给多个消费者的场景,例如实时通知、日志收集等。
3.3 适用场景和优缺点
点对点模式:适用于需要确保每条消息只被消费一次的场景,优点是消息传递可靠,缺点是扩展性较差,不适合大量消费者同时消费的情况。
发布订阅模式:适用于需要广播消息给多个消费者的场景,优点是扩展性好,可以支持大量消费者同时消费,缺点是消息可能会被重复消费,需要额外的机制来处理这种情况。
3.4 实际应用案例
点对点模式:在订单处理系统中,每个订单的创建、支付等操作可以看作是一个独立的消息,确保每个订单的处理过程不会相互影响。
发布订阅模式:在实时通知系统中,当有新的事件发生时,可以将消息发布到主题上,所有订阅该主题的客户端都能实时接收到通知。
通过了解这两种模式的定义、区别和适用场景,可以更好地选择适合自己需求的消息队列模式。
5 总结
了解RockectMQ的基本组成、通信方式、消息传输模型