RocketMQ源码解读(待完善)

目录

环境搭建

NameSrv源码

作用

NamesrvStartup启动类

配置类

broker源码

作用

BrokerStartup启动类

配置项代码

Broker心跳注册

Producer启动和发送

Producer实现类

Producer启动流程

Producer发送消息

有序消息&无序消息

Consumer源码

启动

拉取消息

负载均衡

消费者长连接轮询优化


环境搭建

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.conflogback_broker.xmllogback_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启动类

  1. 解析合并配置项.解析-c和-p命令参数, 解析两个核心配置类NamesrvConfig和NettyServerConfig
  2. 初始化几个定时任务. 监听活跃的broker, 打印配置项到日志
  3. 创建服务关闭钩子函数
  4. 创建Netty服务端

配置类

  • NamesrvConfig : NameSrv服务配置
  • NettyServerConfig : 处理客户端连接配置

broker源码

作用

消息存储, 消息转发

BrokerStartup启动类

启动下面几个主要的服务

  1. messageStore: 消息存储组件, 将CommitLog的写入事件分发给ComsumeQueue和IndexFile

  2. remotingServer和fastRemotingServer: 两个Netty服务 

  3. brokerOuterAPI: Netty客户端, 往外发请求, 例如注册broker

  4. pullRequestHoldService: 长连接, 拉消息

  5. 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执行流程

  1. 注册Producer到对应table
  2. 注册TopicPublishInfo到对应table
  3. 启动工厂, 创建下面一些服务
    1. netty客户端服务
    2. 定时任务服务, 更新NameSrv,Consumer
    3. 拉取消息服务

Producer发送消息

  1. 设置发送次数
    1. 同步方式, 次数=失败重试次数+1
    2. 异步方式, 次数=1
  2. 选择一个要发送的MessageQueue
  3. 如果重试入口进来, 设置topic为重试topic, 会将消息发送到重试队列
  4. 校验是否发送超时, 默认超时时间3秒
  5. sendKernelImpl发送消息
  6. updateFaultItem, 更新offset, 上次发送时间
  7. 处理发送结果
    1. 同步方式, 校验发送结果, 失败重试
    2. 异步方式, 不管结果直接退出

有序消息&无序消息

Consumer源码

启动

拉取消息

consumer绑定messageQueue

顺序消费和并发消费区别

推模式怎么用拉模式实现

负载均衡

消费者长连接轮询优化

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值