目录
环境搭建
1. 从官网下载源码, 这里下载4.9.5版本
http://rocketmq.apache.org/dowloading/releases/
2. 用idea打开并编译
mvn clean install -Dmaven.test.skip=true
注意:如果编译报错, 去pom.xml注释checkstyle插件
3. 在项目目录下创建一个conf目录,并从distribution
拷贝broker.conf
和logback_broker.xml
和logback_namesrv.xml
4. 启动namesrv,启动之前配置环境变量ROCKETMQ_HOME, 不然会报错
// 配置项目所在位置
ROCKETMQ_HOME=D:\rocketmq-all-4.9.5-source-release
运行NamesrvStartup类, 启动成功标识:
5. 启动broker. 启动之前同样要配置环境变量ROCKETMQ_HOME, 和修改broker.conf文件, 改成当前机器目录
启动成功标识:
NameSrv源码
作用
类似于注册中心, 提供了broker端的服务注册与发现
NamesrvStartup启动类
- 解析合并配置项.解析-c和-p命令参数, 解析两个核心配置类NamesrvConfig和NettyServerConfig
- 初始化几个定时任务. 监听活跃的broker, 打印配置项到日志
- 创建服务关闭钩子函数
- 创建Netty服务端
配置类
- NamesrvConfig : NameSrv服务配置
- NettyServerConfig : 处理客户端连接配置
broker源码
作用
消息存储, 消息转发
BrokerStartup启动类
启动下面几个主要的服务
-
messageStore: 消息存储组件, 将CommitLog的写入事件分发给ComsumeQueue和IndexFile
-
remotingServer和fastRemotingServer: 两个Netty服务
-
brokerOuterAPI: Netty客户端, 往外发请求, 例如注册broker
-
pullRequestHoldService: 长连接, 拉消息
-
scheduledExecutorService: Broker心跳注册服务
配置项代码
- BrokerConfig : Broker服务配置
- MessageStoreConfig : 消息存储配置。 这两个配置参数都可以在broker.conf文件中进行配置
- NettyServerConfig : Netty服务端占用了10911端口。同样也可以在配置文件中覆盖。
- NettyClientConfig : Broker既要作为Netty服务端,向客户端提供核心业务能力,又要作为Netty客户端,向NameServer注册心跳。
Broker心跳注册
方法入口:BrokerController.this.registerBrokerAll
==
Producer启动和发送
Producer实现类
- DefaultMQProducer: 普通发送者
- TransactionMQProducer: 事务发送者
Producer启动流程
DefaultMQProducer.start执行流程
- 注册Producer到对应table
- 注册TopicPublishInfo到对应table
- 启动工厂, 创建下面一些服务
- netty客户端服务
- 定时任务服务, 更新NameSrv,Consumer
- 拉取消息服务
Producer发送消息
- 设置发送次数
- 同步方式, 次数=失败重试次数+1
- 异步方式, 次数=1
- 选择一个要发送的MessageQueue
- 如果重试入口进来, 设置topic为重试topic, 会将消息发送到重试队列
- 校验是否发送超时, 默认超时时间3秒
- sendKernelImpl发送消息
- updateFaultItem, 更新offset, 上次发送时间
- 处理发送结果
- 同步方式, 校验发送结果, 失败重试
- 异步方式, 不管结果直接退出
有序消息&无序消息
Consumer源码
启动
拉取消息
consumer绑定messageQueue
顺序消费和并发消费区别
推模式怎么用拉模式实现