开源测试工具 jvm-sandbox-repeater 源码阅读笔记--起始篇

ELes for PPmoney · August 31, 2019 · 571 hits

开篇背景

最近阿里开源了一个可以免侵入代码对实现流量录制回放的工具jvm-sandbox-repeater,由于工作需要捣鼓了一段时间,为了更深入地学习这个开源工具,在这里以写笔记的方式记录下自己源码阅读的理解。在记录自己阅读情况的同时,也想分享自己的学习经验,可以供有需要的人做个参考。

因为我的java基础并不扎实,所以肯定会存在理解错误的情况。请大家看文章的时候带着辩证的眼光去看,有疑问有遗漏欢迎提出一起讨论,有错误的地方恳请指正。

阅读建议

阅读之前建议大家先上手使用一下这个工具,对这个工具的使用模式有了大致的了解了再进行源码阅读。预习资料:

那么接下来我们进入正题。

模块结构

elesgongdeMac-mini:jvm-sandbox-repeater gongying$  tree -L 1
.
├── LICENSE
├── Readme.md
├── bin
├── docs
├── hessian-lite
├── pom.xml
├── repeater-client
├── repeater-console
├── repeater-module
├── repeater-plugin-api
├── repeater-plugin-core
├── repeater-plugins
└── travis.sh

核心模块

repeater-module

repeater模块,负责的是模块对外的交互、插件装配以及一些spring的类信息捕捉。

repeater-plugin-api

repeater插件api库,主要定义了一些实体类、api、spi和exception,这里的每个类以及方法都有详细注释说明用途,是一个非常重要的阅读源码入口

repeater-plugin-core

repeater插件core库,实现了api中的接口逻辑,是repeater中最核心模块,从这里可以了解到api中不同用途的接口是怎么样实现的,并且可以从这里了解整个录制回放过程的实现链路。

repeater-plugins

repeater的插件库,以repeater-plugin-core为基础,针对不同类型的协议、不同类型的中间件进行拓展形成插件。每一个插件都是一个模块,而且实现代码非常少。官方有提供插件开发解析(传送门),从这篇解析我不得不感叹这个repeater插件api库的设计真是太棒了!少量的代码就能实现有效的拓展。

辅助模块

repeater-console

repeater服务端模式下的服务端应用,提供内存模式下的保存录制记录、回放记录的方法。
另外也包含了官方文档示例中使用的应用接口。

repeater-client

从java回放器的备注信息上来看,是在一个为了支持在attach模式下也能获取到spring内部bean的模块,需要引入应用代码中使用。

hessian-lite

序列化工具库,repeater主要使用的序列化类型是hessian序列化,录制结果保存与读取、回放结果保存与读取都使用到了这个工具库。

bin

脚本库,包含打包脚本、健康检查脚本以及一些standlone模式下的配置文件等。
本地开发可以直接使用install-local.sh完成打包+本地部署。
bootstrap.sh中可以看到如何启用调试模式,如果以agent模式启动,建议将suspend=n改为suspend=y即可

${JAVA_HOME}/bin/java -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8000 \
-javaagent:${HOME}/sandbox/lib/sandbox-agent.jar=server.port=8820\;server.ip=0.0.0.0 \
-Dapp.name=repeater \
-Dapp.env=daily \
-jar ${HOME}/.sandbox-module/repeater-bootstrap.jar

docs

使用说明文档。

模块间的关系

待填坑

共收到 0 条回复 时间 点赞
需要 Sign In 后方可回复, 如果你还没有账号请点击这里 Sign Up