RocketMQ源码学习- 1. 入门
Posted milicool
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了RocketMQ源码学习- 1. 入门相关的知识,希望对你有一定的参考价值。
-
消息队列在互联网应用中使用较为广泛,学习她可以让我门更加了解使用技术的工作原理
-
透过学习她的源码,拓宽认知
-
RocketMQ经历了阿里双十一
有哪些名词
-
Producer 消息生产者,负责产生消息
-
Consumer 消息消费者,负责消费消息
-
Producer Group 一类 Producer 的集合名称,这类 Producer 通常发送一类消息,且发送逻辑一致
-
Consumer Group 一类 Consumer 的集合名称,这类 Consumer 通常消费一类消息,且消费逻辑一致
-
Push Consumer Consumer 的一种,应用通常向 Consumer 对象注册一个 Listener 接口,一旦收到消息,Consumer 对象立 刻回调 Listener 接口方法。(主动向Consumer推送消息)
-
Pull Consumer Consumer 的一种,应用通常主动调用 Consumer 的拉消息方法从 Broker 拉消息,主动权由应用控制。(由Consumer拉取消息)
-
Broker 消息中转角色,负责存储消息,转发消息
-
NameServer 负责监听和管理生产者、消费者、Broker的注册中心
-
Topic 消息主题,一级消息类型,通过 Topic 对消息进行分类
-
Tag 消息标签,二级消息类型,用来进一步区分某个 Topic 下的消息分类
-
集群消费 一个 Group ID 所标识的所有 Consumer 平均分摊消费消息。例如某个 Topic 有 9 条消息,一个 Group ID 有 3 个 Consumer 实例,那么在集群消费模式下每个实例平均分摊,只消费其中的 3 条消息。
-
广播消费 一个 Group ID 所标识的所有 Consumer 都会各自消费某条消息一次。例如某个 Topic 有 9 条消息,一个 Group ID 有 3 个 Consumer 实例,那么在广播消费模式下每个实例都会各自消费 9 条消息。
-
顺序消息 消费消息的顺序要同发送消息的顺序一致,在 RocketMQ 中,主要指的是局部顺序,即一类消息为满足顺 序性,必须 Producer 单线程顺序发送,且发送到同一个队列,这样 Consumer 就可以按照 Producer 发送 的顺序去消费消息。
-
普通顺序消息 顺序消息的一种,正常情况下可以保证完全的顺序消息,但是一旦发生通信异常,Broker 重启,由于队列 总数发生变化,哈希取模后定位的队列会变化,产生短暂的消息顺序不一致。 如果业务能容忍在集群异常情况(如某个 Broker 宕机或者重启)下,消息短暂的乱序,使用普通顺序方 式比较合适。
代码模块组成, 模块架构图
项目结构如图
版本为4.5.2
-
rocketmq-acl: 权限控制(ACL)主要为RocketMQ提供Topic资源级别的用户访问控制
-
rocketmq-broker: 负责转发消息, 接收producer发来的消息并存储,同时consumer来这里拉取消息
-
rocketmq-client: 包含了Producer和Consumer,负责消息发送和接收
-
rocketmq-common: 通用的常量枚举、基类方法或者数据结构,按描述的目标来分包通俗易懂
-
rocketmq-distribution:一些 sh 脚本和 配置,主要是在部署的时候用的
-
rocketmq-filter:过滤器,用于服务端 SQL92 的过滤方式
-
rocketmq-logappender: 集成log4、log4j2、logback日志
-
rocketmq-logging: 提供日志的工厂类和方法
-
rocketmq-namesrv: 注册中心,每个 broker 都会在这里注册,client 也会从这里获取 broker 的相关信息
-
rocketmq-openmassageing:
-
rocketmq-remoting: 用Netty4写的客户端和服务端
-
rocketmq-store:存储服务,消息存储,索引存储,commitLog存储
-
rocketmq-ools:命令行工具
RocketMQ部署结构图
-
Name Server 是一个几乎无状态节点,可集群部署,节点之间无任何信息同步。
-
Broker 部署相对复杂,Broker 分为 Master 与 Slave,一个 Master 可以对应多个 Slave,但是一个 Slave 只能 对应一个 Master,Master 与 Slave 的对应关系通过指定相同的 BrokerName,不同的 BrokerId 来定义,BrokerId 为 0 表示 Master,非 0 表示 Slave。Master 也可以部署多个。每个 Broker 与 Name Server 集群中的所有节 点建立长连接,定时注册 Topic 信息到所有 Name Server。
-
Producer 与 Name Server 集群中的其中一个节点(随机选择)建立长连接,定期从 Name Server 取 Topic 路 由信息,并向提供 Topic 服务的 Master 建立长连接,且定时向 Master 发送心跳。Producer 完全无状态,可集群部署。
-
Consumer 与 Name Server 集群中的其中一个节点(随机选择)建立长连接,定期从 Name Server 取 Topic 路由信息,并向提供 Topic 服务的 Master、Slave 建立长连接,且定时向 Master、Slave 发送心跳。Consumer 既可以从 Master 订阅消息,也可以从 Slave 订阅消息,订阅规则由 Broker 配置决定。
以上是关于RocketMQ源码学习- 1. 入门的主要内容,如果未能解决你的问题,请参考以下文章