消息中间件是高并发的基石,其中RocketMQ是必备掌握的,下面我就全面详解RocketMQ的工作原理@mikechen
RocketMQ
RocketMQ是阿里巴巴开源的分布式消息中间件,适用于大规模实时数据传输和处理,具备高可靠性和高性能。
RocketMQ工作原理
RocketMQ 工作原理,是通过将消息的生产者和消费者解耦,以及通过 NameServer 维护信息,实现了高效、可靠的消息传递和处理机制。
RocketMQ整体架构,如下图所示:
如上图所示,主要由四个核心组件组成,包含:NameServer、Brocker、以及Producer和Consumer组成@mikechen
NameServer
NameServer 在 RocketMQ 中扮演着重要的角色,主要负责记录维护Topic、Broker的信息,以及提供命名服务。
如下图红色框所示:
NameServer 维护了一个包含所有主题(Topic)和 Broker 的路由信息,每个主题都映射到一个或多个 Broker。
并且,NameServer 保存了所有 Broker 的元数据,包括: Broker 的名称、IP 地址、端口号等。
比如:生产者和消费者在与 RocketMQ 交互时,会通过 NameServer 获取这些元数据信息,以便正确地发送或接收消息。
除此之外,NameServer 还负责检测 Broker 的健康状态,比如:当某个 Broker 发生故障或不可用时,NameServer 会将其从路由信息表中移除。
Producer
Producer 在 RocketMQ 中是生产消息的主体,负责将消息发送到指定的主题,并通过负载均衡算法选择合适的 Broker 进行消息的发送。
整体设计,如下图左侧红框所示:
第一:首先消息生成
比如:Producer 负责生成消息,消息可以是文本、二进制数据、或者其他格式的消息数据。
第二:消息发送
然后,应用程序通过 Producer 接口, 将消息发送到指定的主题(Topic)。
主题是消息的逻辑分类,相当于一个消息的容器,用于标识一类相关的消息。
比如:订单业务的,商品业务的,用户业务的…等等,用于逻辑分类。
除此之外,消息发送会涉及到不同的策略,比如:同步发送、异步发送、延迟发送…等等,可以根据自己的实际情况来选择发送的类型。
Broker
Broker是RocketMQ消息传递系统的核心组件,负责:消息的存储和传输节点,负责接收、存储和传输消息等等。
整体设计,如下图红色框所示:
核心功能,包含:
1.消息存储
Broker 负责接收生产者发送的消息,并将消息存储在磁盘或者内存中。
存储消息的方式可以是持久化存储,也可以是暂存于内存中等待传输。
2.主题管理
每个 Broker 可以管理多个主题(Topic),每个主题包含一个、或多个消息队列(Queue)。
每个队列可以分为多个分区(Partition),用于提高消息的并发处理能力。
3.消息传输
Broker 负责将存储在其中的消息传输给消费者,当消费者订阅了某个主题时,Broker 将根据订阅关系将消息传输给相应的消费者。
Broker配置,如下图所示:
brokerIP1 / brokerIP2:指定 Broker 的 IP 地址,如果是集群部署,可以配置多个 IP 地址,以逗号分隔。
brokerName:指定 Broker 的名称,用于标识一个 Broker 实例。
brokerId:指定 Broker 的唯一标识符。在集群部署中,每个 Broker 都应具有唯一的 brokerId。
listenPort:指定 Broker 监听的端口号,用于与生产者和消费者进行通信。
Consumer
RocketMQ 中的 Consumer 是用于接收和处理消息的组件,主要用于订阅主题(Topic),并消费来自 Broker 的消息。
整体设计,如下图红色框所示:
Consumer 在 RocketMQ 中负责:订阅消息、接收消息、消费消息。
Consumer 可以订阅一个、或多个主题(Topic),以接收生产者发送到这些主题的消息。
Consumer也 可以根据订阅关系,从 Broker 主动拉取消息,也可以通过推送方式接收消息。
陈睿mikechen
十余年BAT架构经验,资深技术专家,就职于阿里、淘宝、百度等一线互联网大厂。
关注「mikechen」公众号,获取更多技术干货!
后台回复【面试】即可获取《史上最全阿里Java面试题总结》,后台回复【架构】,即可获取《阿里架构师进阶专题全部合集》