背景与导读

对jvm-sandbox-repeater做了有一段时间的学习和调研,看到目前repeater相关的文章比较少,所以将自己这段时间了解到的内容整理出来,分享给大家。

学习笔记分成入门使用篇和原理说明篇两个篇章。
入门使用篇主要是基于官方文档和testerhome其他的操作文档,对repeater的使用上的操作细节和配置做了补充说明,建议大家先按照官方的文档使用过了之后,再看这些文档,能够更好地理解文档内容。
原理说明篇则是主要围绕录制流程和回放流程,进行相关的源码分析说明,个人道行尚浅,若分析有错漏,欢迎大家指正补充

笔记中的每一个篇都有建立在此前篇章的基础上,建议按照顺序阅读。
在这里记录下系列文章地址:
[jvm-sandbox-repeater 学习笔记][入门使用篇] 1 安装与启动(本文)
[jvm-sandbox-repeater 学习笔记][入门使用篇] 2 配置说明
[jvm-sandbox-repeater 学习笔记][入门使用篇] 3 现有接口说明
[jvm-sandbox-repeater 学习笔记][入门使用篇] 4 录制、回放与调试

1.1 环境准备

安装包括repeater安装、repeater-console安装

目前安装和使用,需要mac或者linux系统下进行,如果在windows下进行可能会遇到安装路径出错导致安装失败或者运行失败的情况。

  • linux/Mac os

  • jdk 1.8+

  • maven 3.2+

  • 数据库mysql 5.7+(repeater-console可能用到)

PS:如果只是想简单运行,可以直接使用官方版本,参考官方用户手册,以standalone模式把玩。

1.2 repeater-console安装与启动

当我们真正进行使用的时候,一般采取非standalone模式,需要repeater-console结合使用。

PS:repeater与repeater-console之间的协作关系简单来说:repeater负责执行录制任务和回放任务,而repeate-console则是负责将录制记录和回放结果保存,并提供接口给用户触发回放任务。

1.2.1 克隆源码

# 克隆代码到本地git clone https://github.com/alibaba/jvm-sandbox-repeater.git

1.2.2 启动repeater-console

方法有二:

  1. 【本地试用强烈推荐】idea右键运行启动:jvm-sandbox-repeater/repeater-console/repeater-console-start/src/main/java/com/alibaba/repeater/console/start/Application.java

  2. 打成jar包运行,项目根目录路径下执行以下命令。

mvn clean install -Dmaven.test.skip=true && java -jar repeater-console/repeater-console-start/target/repeater-console.jar

1.3 repeater安装

安装时必须保证安装用户与被录制应用启动的用户一致。

可以直接执行官方文档中的安装脚本,也可使用本地源码安装。

1.3.1 本地源码安装

  1. 克隆源码到本地

# 克隆代码到本地git clone https://github.com/alibaba/jvm-sandbox-repeater.git
  1. 修改repeater配置,配置路径:jvm-sandbox-repeater/bin/repeater.properties。如下,主要修改内容为将所有url的主机地址改为127.0.0.1以及本地repeater-console的端口,repeat.standalone.mode改为false

repeat.standalone.mode控制repeater是否以standalone模式启动,我们要与repeater-console结合使用,所以配置为false。其他url都是与repeater-console交互的url,所以需要将host改为本地启动的repeater-console的地址。

# 录制消息投递地址broadcaster.record.url=http://127.0.0.1:8001/facade/api/record/save

# 回放结果投递地址broadcaster.repeat.url=http://127.0.0.1:8001/facade/api/repeat/save

# 回放消息取数据地址repeat.record.url=http://127.0.0.1:8001/facade/api/record/%s/%s

# 配置文件拉取地址repeat.config.url=http://127.0.0.1:8001/facade/api/config/%s/%s

# 是否开启脱机工作模式repeat.standalone.mode=false
  1. 到代码的bin文件夹下执行 install-local.sh 脚本。执行完成即可。

# 到代码的bin文件夹下执行 install-local.sh 脚本cd jvm-sandbox-repeater/binsh install-local.sh

1.4 repeater启动与关闭

repeater的启动方法有两种。attach模式和agent模式。

启动repeater之后就会从repeater-console拉取配置,根据配置对请求进行筛选,开始录制。并且可以接收回放请求,随时进行请求。

1.4.1 attach模式启动与关闭

切换至被录制应用启动用户,执行以下启动命令。注意repeater启动端口需要选取一个没有被占用的端口。

attach模式下,录制应用名和录制环境这两个参数都会被默认为unknown

# 启动命令~/sandbox/bin/sandbox.sh -p ${被录制应用进程号} -P ${repeater启动端口}# 关闭命令~/sandbox/bin/sandbox.sh -S ${被录制应用进程号}

启动成功/关闭成功的结果:

# 启动成功elesgongdeMac-mini:~ elesgong$ sh ~/sandbox/bin/sandbox.sh -p 6170 -P 8821NAMESPACE : defaultVERSION : 1.2.1MODE : ATTACHSERVER_ADDR : account.jetbrains.comSERVER_PORT : 8821UNSAFE_SUPPORT : ENABLESANDBOX_HOME : /Users/elesgong/sandbox/bin/..SYSTEM_MODULE_LIB : /Users/elesgong/sandbox/bin/../moduleUSER_MODULE_LIB : /Users/elesgong/sandbox/sandbox-module;~/.sandbox-module;SYSTEM_PROVIDER_LIB : /Users/elesgong/sandbox/bin/../providerEVENT_POOL_SUPPORT : DISABLE# 关闭成功elesgongdeMac-mini:~ gongying$ sh ~/sandbox/bin/sandbox.sh -p 6170 -S

jvm-sandbox[default] shutdown finished.

1.4.2 agent模式下启动与关闭

需要重启被录制的应用。在java启动参数中加入对应的参数,如下。

agent模式下的启停都跟随应用,配置好参数后,应用启动则启动,应用停止则停止。

java -javaagent:${HOME}/sandbox/lib/sandbox-agent.jar=server.port=${repeater启动端口}\;server.ip=0.0.0.0 \-Dapp.name=${录制应用名} \-Dapp.env=${录制环境} \-jar application.jar

启动成功检查方法:

  1. 应用正常启动,无报错

  2. 看日志,日志路径~/logs/sandbox/repeater/repeater.log。

需要关注的日志内容主要是是以下几种:

  • 以 enable plugin开头的,查看插件挂载情况

  • register event bus success in repeat-register,说明插件加载完成,模块加载完成,可以开始录制和回放的行为。

PS:其中会夹杂很多以Register bean:name=的日志,这些日志说明了被repeater记录下来的运行在应用jvm中的实例,会在java回放的时候用到。但是与启动repeater关系不大,在启动阶段可忽略。

2019-10-08 18:44:51 INFO  initializing logback success. file=/Users/elesgong/.sandbox-module/cfg/repeater-logback.xml;2019-10-08 18:44:51 INFO  module on loaded,id=repeater,version=1.0.0,mode=AGENT2019-10-08 18:44:51 INFO  agent launch mode,use Spring Instantiate Advice to register bean.2019-10-08 18:44:51 INFO  onActive2019-10-08 18:44:53 INFO  pull repeater config success,config=com.alibaba.jvm.sandbox.repeater.plugin.domain.RepeaterConfig@569961222019-10-08 18:44:53 INFO  http plugin required servlet-api class router,waiting for class loading2019-10-08 18:44:54 INFO  http plugin required servlet-api class router,waiting for class loading2019-10-08 18:44:55 INFO  enable plugin mybatis success2019-10-08 18:44:56 INFO  add watcher success,type=mybatis,watcherId=10032019-10-08 18:44:56 INFO  enable plugin redis success2019-10-08 18:44:56 INFO  add watcher success,type=redis,watcherId=10052019-10-08 18:44:57 INFO  add watcher success,type=redis,watcherId=10072019-10-08 18:44:57 INFO  enable plugin http success2019-10-08 18:44:57 INFO  add watcher success,type=http,watcherId=10092019-10-08 18:44:57 INFO  enable plugin java-entrance success2019-10-08 18:44:57 INFO  watch plugin occurred errorcom.alibaba.jvm.sandbox.repeater.plugin.exception.PluginLifeCycleException: enhance models is empty, plugin type is java-entranceat com.alibaba.jvm.sandbox.repeater.plugin.core.impl.AbstractInvokePluginAdapter.watchIfNecessary(AbstractInvokePluginAdapter.java:122)at com.alibaba.jvm.sandbox.repeater.plugin.core.impl.AbstractInvokePluginAdapter.watch(AbstractInvokePluginAdapter.java:65)at com.alibaba.jvm.sandbox.repeater.module.RepeaterModule.initialize(RepeaterModule.java:187)at com.alibaba.jvm.sandbox.repeater.module.RepeaterModule.access$500(RepeaterModule.java:61)at com.alibaba.jvm.sandbox.repeater.module.RepeaterModule$1.run(RepeaterModule.java:133)at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)at java.lang.Thread.run(Thread.java:745)2019-10-08 18:44:57 INFO  enable plugin java-subInvoke success2019-10-08 18:44:58 INFO  add watcher success,type=java,watcherId=10112019-10-08 18:44:58 INFO  add watcher success,type=java,watcherId=10132019-10-08 18:44:59 INFO  add watcher success,type=java,watcherId=10192019-10-08 18:44:59 INFO  add watcher success,type=java,watcherId=10212019-10-08 18:44:59 INFO  add watcher success,type=java,watcherId=10232019-10-08 18:44:59 INFO  add watcher success,type=java,watcherId=10252019-10-08 18:45:00 INFO  add watcher success,type=java,watcherId=10272019-10-08 18:45:00 INFO  add watcher success,type=java,watcherId=10292019-10-08 18:45:00 INFO  add watcher success,type=java,watcherId=10312019-10-08 18:45:00 INFO  add watcher success,type=java,watcherId=10332019-10-08 18:45:00 INFO  add watcher success,type=java,watcherId=10352019-10-08 18:45:01 INFO  add watcher success,type=java,watcherId=10412019-10-08 18:45:01 INFO  register event bus success in repeat-register

出现部分插件加载失败的情况,大多数是由于配置错误,如下错误日志是由于在pluginIdentities中配置了java-entrance插件,却在javaEntranceBehaviors中配置了空数组导致。

错误配置:

{"useTtl": true,"degrade": false,"exceptionThreshold": 1000,"sampleRate": 10000,"pluginsPath": null,"httpEntrancePatterns": ["^/api/city/.*$"],"javaEntranceBehaviors": [],

"javaSubInvokeBehaviors": [{"classPattern": "com.test.commons.util.DateUtils","methodPatterns": ["getNowDateTime","getNowDate"

],"includeSubClasses": false},......],"pluginIdentities": ["http","java-entrance","java-subInvoke","mybatis","redis"],"repeatIdentities": ["http","java"]}

错误日志:

2019-10-08 18:44:57 INFO  watch plugin occurred errorcom.alibaba.jvm.sandbox.repeater.plugin.exception.PluginLifeCycleException: enhance models is empty, plugin type is java-entranceat com.alibaba.jvm.sandbox.repeater.plugin.core.impl.AbstractInvokePluginAdapter.watchIfNecessary(AbstractInvokePluginAdapter.java:122)at com.alibaba.jvm.sandbox.repeater.plugin.core.impl.AbstractInvokePluginAdapter.watch(AbstractInvokePluginAdapter.java:65)at com.alibaba.jvm.sandbox.repeater.module.RepeaterModule.initialize(RepeaterModule.java:187)at com.alibaba.jvm.sandbox.repeater.module.RepeaterModule.access$500(RepeaterModule.java:61)at com.alibaba.jvm.sandbox.repeater.module.RepeaterModule$1.run(RepeaterModule.java:133)at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)at java.lang.Thread.run(Thread.java:745)

1.4.3 attach和agent启动模式对比

模式 优点 不足
attach 1. 不需要启停应用,即插即用,随时停止
2. 更新配置不需要重启应用
1. 进行java回放的时候可能由于无法获取到对应实例而回放失败
2. 如果需要对repeater进行debug,需要将repeater代码嵌入到被录制应用的代码中,不方便debug
3. 不可进行录制应用名和录制环境的配置,会被默认标记为unknown
agent 1. 进行java回放的时候能够获取到对应实例能够正常回放
2. 启动应用时开启调试,即可远程调试repeater
3. 支持配置录制应用名以及录制环境,方便在录制记录中进行区分
1. 启动/停止都需要重启应用
2. 更新配置也需要重启应用

com+ system application 启动_[jvmsandboxrepeater 学习笔记][入门使用篇] 1 安装与启动相关推荐

  1. Java学习笔记之三:Nexus的安装和启动

    一.下载 Download Archives - Repository Manager 3 地址如上 ,里面版本3的历史版本都有,选择最新版本的Windows archive对应的zip下载 如果最新 ...

  2. C语言学习笔记-入门整合篇(十万字长文)

    (该篇学习内容全部来自于C语言中文网, 本篇内容仅仅是简易学习笔记 , 以自己的理解+网站部分描述结合+个人补充,并不适合编程初学者观看!!! 需要有一定的编程基础) 数据在内存中存储 内存条包含了上 ...

  3. Hadoop学习笔记——入门教程(虚拟机安装LinuxHadoop环境搭建配置)

    文章目录 一.Hadoop安装配置文档及注意事项 二.Hadoop概述 2.1.Hadoop是什么 2.2.Hadoop的发展历史 2.3.Hadoop三大发行版本 2.3.1 Apache Hado ...

  4. 第十一天堂的学习笔记Ubuntu第一篇,分区安装,设置root密码,安装五笔和VMtools

    写给以后的自己! 虚拟机版本:WMware workstation 14 Pro 14.1.1 build-7528167 Ubuntu安装包名称:ubuntu-16.04.3-desktop-amd ...

  5. 嵌入式知识-ARM裸机-学习笔记(9):SD卡启动详解(S5PV210)

    嵌入式知识-ARM裸机-学习笔记(9):SD卡启动详解(S5PV210) 一.SD卡介绍 1. SD卡背景知识和特点 SD卡.MMC卡.MicroSD.TF卡:这些卡其实内部就是Flash存储颗粒,比 ...

  6. flink1.12.0学习笔记第1篇-部署与入门

    flink1.12.0学习笔记第 1 篇-部署与入门 flink1.12.0学习笔记第1篇-部署与入门 flink1.12.0学习笔记第2篇-流批一体API flink1.12.0学习笔记第3篇-高级 ...

  7. MongoDB学习笔记(入门)

    MongoDB学习笔记(入门) 一.文档的注意事项: 1.  键值对是有序的,如:{ "name" : "stephen", "genda" ...

  8. flink1.12.0学习笔记第2篇-流批一体API

    flink1.12.0学习笔记第 2 篇-流批一体API flink1.12.0学习笔记第1篇-部署与入门 flink1.12.0学习笔记第2篇-流批一体API flink1.12.0学习笔记第3篇- ...

  9. LINUX学习笔记—SAMBA使用篇 smb 文件共享--学习篇

    LINUX学习笔记-SAMBA使用篇 smb 文件共享 (转) Linux学习笔记-Samba使用篇 前言:半个月前开始安装.学习redhat LINUX7.0.作为一个Linux新手,不可避免的遇上 ...

  10. Android学习笔记第五篇--网络连接与云服务(一)

    Android学习笔记第五篇–网络连接与云服务 第一章.无线连接设备 ​ 除了能够在云端通讯,Android的无线API也允许在同一局域网内的设备通讯,**甚至没有连接网络,而是物理具体相近,也可以相 ...

最新文章

  1. php错误提示如何查询,php-如何显示我的MySQLi查询错误?
  2. 移动硬盘插入提示格式化
  3. 扩容是元素还是数组_348,数据结构1,数组
  4. Win11如何自动关机 windows11自动关机的设置方法
  5. php mvc 实现,php mvc的简单实现
  6. Listary免费版下载与安装
  7. 使用whistle代理
  8. USRP X310使用的准备工作--Linux进行FPGA image烧录
  9. 安全教育平台登录显示服务器繁忙,安全教育平台登录失败是怎么回事 解决方法...
  10. 旅游类APP-环境搭建
  11. 安卓开发: Jetpack compose + kotlin 实现 俄罗斯方块游戏
  12. 算法 图1 列出连通集
  13. 解决 Win 10 ipv6无网络权限/无Internet连接权限 问题
  14. CarSim仿真快速入门(三)
  15. DWD层 (业务数据 二)
  16. 科学家提激进研究理论:人类世界或为虚拟空间
  17. 爱尔兰卫生部遭Conti勒索软件攻击说明与建议
  18. 微信小程序集成jenkins自动打码
  19. 李笑来,那个一顿饭点8条鲈鱼的人
  20. 1、项目1-输出点阵图

热门文章

  1. 测试VGA12H直接写屏速度 V1.1
  2. 关于回车自动跳转的问题,能不能有选择的跳转??
  3. Python游戏开发入门3 Pygame屏幕绘制机制
  4. 20200721每日一句
  5. 20191026每日一句
  6. 181218每日一句
  7. Atitit 信息检索 之音乐检索实践 艾提拉注 目录 1. 常规检索 歌手 歌名 1 1.1. 年代检索 1 1.2. 歌词检索(可以依靠web 1 1.3. 哼唱检索 原曲检索(可以使用酷
  8. Atitit 提升扩展性bpmn艾提拉总结 工作流 目录 1.1. 尽管BPMN 1.1全面地处理了过程建模符号,但它实质上缺少解决交换格式(用于图交换)的问题 1 1.2. BPMN 2.0中使
  9. Atitit mybatis缓存遇到的问题与解决 1.1. 只有getobj 没有执行putobject 1 1.2. 默认所有的select要读取缓存怎么办。。执行过滤 可以自己定义个白名单。
  10. Atitit 编程语言知识点tech tree v2 attilax大总结