阅读RocketMQ源码(1) - 项目信息,本地日志模块

简介

源码: https://github.com/apache/rocketmq

官网: https://rocketmq.apache.org

中文文档: https://github.com/apache/rocketmq/tree/master/docs/cn

版本: 4.8

项目模块

用idea的analyze module dependencies功能整理出依赖顺序,也是阅读顺序

  • logging, 本地日志模块
  • remoting, 通信模块
  • common, 工具类
  • srvutil, 命令行交互工具类
  • acl, 网络控制工具
  • client, 客户端代码
  • filter, 过滤器解析代码
  • logappender, 对几种日志框架的适配
  • store, 落盘逻辑
  • tools, 监控工具
  • openmessaging, open-message协议实现
  • broker, broker代码
  • namesrv, 路由注册中心

本地日志模块

Log4j的最精简fork

Appender -> Logger(AppenderPipeline)

实现了RollingFileAppender等多种appender,用到writer和buffer

SysLogger即标准输入输出兜底

tips

获取当前系统的行分隔符

1
System.getProperty("line.separator")

finalize

jvm回收该对象时执行,用来释放一些手动申请的资源

大量对象同时执行finalize可能引起执行队列堆积

Java9开始被java.lang.ref.Cleaner和java.lang.ref.PhantomReference代替

工厂模式

product

  • InternalLogger

concreate products

  • InnerLogger
  • Slf4jLogger

creator

  • InternalLoggerFactory

concreate creators

  • InnerLoggerFactory
  • Slf4jLoggerFactory

creator给concreate creators提供注册方法,给用户提供生产方法