# RocketMQ 概念

我在学习 RocketMQ 的时候,看到文档中介绍了很多的概念。我非常反感,但是又没有办法,没有这些概念,就没办法更好的去学习后面的内容,当后面使用很多名词来梳理实现原理的时候,就会一头雾水。

上一篇文章中,我们知道了 RocketMQ 由四部分构成。

# 消息模型

Producer 负责生产消息, Consumer 负责消费消息, Broker 负责存储消息, NameServer 负责对 ProducerCustomer 的服务发现,还有路由这两个功能。 Broker 在实际部署过程中对应一台服务器,每个 Broker 可以存储多个 Topic 的消息,每个 Topic 的消息也可以分片存储于不同的 BrokerMessage Queue 用于存储消息的物理地址,每个 Topic 中的消息地址存储于多个 Message Queue 中。 ConsumerGroup 由多个 Consumer 实例构成。

# 消息生产者(Producer)

负责生产消息,一般由业务系统负责生产消息。一个消息生产者会把业务应用系统里产生的消息发送到 broker 服务器。 RocketMQ 提供多种发送方式,同步发送、异步发送、顺序发送、单向发送。同步和异步方式均需要 Broker 返回确认信息,单向发送不需要。

# 消息消费者( Consumer

负责消费消息,一般是后台系统负责异步消费。一个消息消费者会从 Broker 服务器拉取消息、并将其提供给应用程序。从用户应用的角度而言提供了两种消费形式:拉取式消费 ( pull )、推动式消费 ( push )。

# 生产者组( Producer Group

同一类 Producer 的集合,这类 Producer 发送同一类消息且发送逻辑一致。如果发送的是事务消息且原始生产者在发送之后崩溃,则 Broker 服务器会联系同一生产者组的其他生产者实例以提交或回溯消费。

# 消费者组( Consumer Group

同一类 Consumer 的集合,这类 Consumer 通常消费同一类消息且消费逻辑一致。消费者组使得在消息消费方面,实现负载均衡和容错的目标变得非常容易。要注意的是,消费者组的消费者实例必须订阅完全相同的 TopicRocketMQ 支持两种消息模式:集群消费( Clustering )和广播消费( Broadcasting )。

# 拉取式消费( Pull Consumer

Consumer 消费的一种类型,应用通常主动调用 Consumer 的拉消息方法从 Broker 服务器拉消息、主动权由应用控制。一旦获取了批量消息,应用就会启动消费过程。

# 推动式消费( Push Consumer

Consumer 消费的一种类型,该模式下 Broker 收到数据后会主动推送给消费端,该消费模式一般实时性较高。

# 主题( Topic

表示一类消息的集合,每个主题包含若干条消息,每条消息只能属于一个主题,是 RocketMQ 进行消息订阅的基本单位。

# 代理服务器( Broker Server

消息中转角色,负责存储消息、转发消息。代理服务器在 RocketMQ 系统中负责接收从生产者发送来的消息并存储、同时为消费者的拉取请求作准备。代理服务器也存储消息相关的元数据,包括消费者组、消费进度偏移和主题和队列消息等。

# NameServer

NameServer 充当路由消息的提供者。生产者或消费者能够通过名字服务查找各主题相应的 Broker IP 列表。多个 Nameserver 实例组成集群,但相互独立,没有信息交换。

# 集群消费( Clustering

集群消费模式下,相同 Consumer Group 的每个 Consumer 实例平均分摊消息。

# 广播消费( Broadcasting

广播消费模式下,相同 Consumer Group 的每个 Consumer 实例都接收全量的消息。

# 普通顺序消息( Normal Ordered Message

普通顺序消费模式下,消费者通过同一个消息队列( Topic 分区,称作 M essage Queue ) 收到的消息是有顺序的,不同消息队列收到的消息则可能是无顺序的。

# 严格顺序消息( Strictly Ordered Message

严格顺序消息模式下,消费者收到的所有消息均是有顺序的。

# 消息( Message

消息系统所传输信息的物理载体,生产和消费数据的最小单位,每条消息必须属于一个主题。 RocketMQ 中每个消息拥有唯一的 Message ID ,且可以携带具有业务标识的 Key 。系统提供了通过 Message IDKey 查询消息的功能。

# 标签( Tag

为消息设置的标志,用于同一主题下区分不同类型的消息。来自同一业务单元的消息,可以根据不同业务目的在同一主题下设置不同标签。标签能够有效地保持代码的清晰度和连贯性,并优化 RocketMQ 提供的查询系统。消费者可以根据 Tag 实现对不同子主题的不同消费逻辑,实现更好的扩展性。

这是一篇极为枯燥的文章。从下篇文章开始,我们开始对 RocketMQ 进行实践。从零搭建 RocketMQ 集群.

# 最后

希望和你一起遇见更好的自己

更新于 阅读次数

请我喝[咖啡]~( ̄▽ ̄)~*

方小白 微信支付

微信支付

方小白 支付宝

支付宝

方小白 numberpay

numberpay