最近在学习 jvm-sandbox 以及 jvm-sandbox-repeater。学习过程中,每次启动 sandbox 都是通过 sandbox.sh 脚本启动,感觉非常的方便 。但尝试了在多台虚拟机上安装使用以及频繁的启停操作后,考虑能不能有一个解决方案来更好的管理 sandbox,于是有了这篇帖子。
部分页面样式借 (c) 鉴 (x) 了帖子:
流量回放框架 jvm-sandbox-repeater 实践二
发帖的初衷是希望能更多的交流 jvm-sandbox 以及 repeater 的工具使用。(虽然本文并没有涉及到工具的落地使用 ...)
有相关讨论群的求带
顺便附上项目地址:test-services
流量列表管理以及回放和批量回放功能
回放列表及详情查看
历史批量回放数据统计 (很粗糙的写了下)
web 代码暂时未分享,是基于公司其他项目上直接改造的。有部分相关业务代码还未删除。反正都是用的 element 组件,大家自己组装一下就搞定;项目中提供了构建后的 zip 文件
部署在每台应用服务器上,负责启动指定应用服务的 sandbox,目前这种方式只能是 attach 启动 sandbox
负责 web 交互以及和 aide 服务 交互
fork jvm-sandbox-repeater;
修改 java 文件 RepeaterModule.java
/**
* 新增这个方法
*/
private void setSystemProp(){
//偷个懒,把app.name 设置为当前应用服务的进程id;这样就不用启动的时候额外的设置了
System.out.println(">>>> repeater module 开始加载, 设置属性app.name && app.env <<<<");
RuntimeMXBean runtimeMXBean = ManagementFactory.getRuntimeMXBean();
System.setProperty("app.name", runtimeMXBean.getName().split("@")[0]);
System.setProperty("app.env", String.valueOf(configInfo.getServerAddress().getPort()));
}
/**
* 在这里加上刚刚新增的方法
*/
@Override
public void onLoad() throws Throwable {
// 初始化日志框架
LogbackUtils.init(PathUtils.getConfigPath() + "/repeater-logback.xml");
setSystemProp(); //这里我先设置app.name:应用服务的进程id 和 app.env:sandbox的server端口
Mode mode = configInfo.getMode();
log.info("module on loaded,id={},version={},mode={}", com.alibaba.jvm.sandbox.repeater.module.Constants.MODULE_ID, com.alibaba.jvm.sandbox.repeater.module.Constants.VERSION, mode);
/* agent方式启动 */
if (mode == Mode.AGENT && Boolean.valueOf(PropertyUtil.getPropertyOrDefault(REPEAT_SPRING_ADVICE_SWITCH, ""))) {
log.info("agent launch mode,use Spring Instantiate Advice to register bean.");
SpringContextInnerContainer.setAgentLaunch(true);
SpringInstantiateAdvice.watcher(this.eventWatcher).watch();
moduleController.active();
}
}
repeater-plugin-api & repeater-plugin-core 打包上传 maven 私服
新建 Mysql 数据库:test_platform
,执行 sql:test-services-core/src/main/resource/test_platform.sql
修改test-services-core/src/main/resources/application.properties 中的数据库配置
打包 test-sandbox-adie && test-services-core
nginx 部署 website,dist.zip 路径:test-services-core/src/main/resource/dist.zip
启动被测 Demo 应用; 文件路径--> test-core-services/src/main/resource/jvmTest-0.0.1-SNAPSHOT.jar java -jar jvmTest-0.0.1-SNAPSHOT.jar
|| 启动自己的应用服务
启动 test-services-core 服务 java -jar test-services-core-1.0.0.jar
在 web 页面 [sandbox 列表] 添加应用服务对应的 sandbox 配置;
在被测应用服务器上启动 test-sandbox-aide 服务 java -jar -Djava.ext.dirs=${JAVA_HOME}/jre/lib/ext:${JAVA_HOME}/lib/ test-sandbox-aide-1.0.0.jar
(如果启动失败,请检查 ${user.hoem}/coreServices.properties 中的 services 服务地址是否正确 || 检查 ${JAVA_HOME})
web 页面 [Sandbox 列表] 新增 jvmTest 应用的 repeater 录制规则; 例: 上面的 [repeater 录制管理示图]
web 页启动 jvmTest 应用的 sandbox
录制流量:curl -s http://${jvmTest-ip}:${port}/api/test10
(接口有 10 个:test1-test10)