JVM-SandBox-Repeater 體驗部署(1/2)

JVM-SandBox-Repeater 初體驗 環(huán)境搭建

環(huán)境信息

操作系統(tǒng):Mac OS 、Linux(相同)

下載源碼

JVM-SandBox 結(jié)構(gòu)參考:(安裝后的結(jié)構(gòu))

Linux:/home/用戶名/
Mac:/Uaers/用戶名/

├── logs
│   └── sandbox
│       ├── repeater
│       │   ├── repeater.log
│       ├── sandbox-mgr.log
│       ├── sandbox.log
├── .sandbox-module
│   ├── cfg
│   ├── plugins
│   ├── repeater-bootstrap.jar
│   └── repeater-module.jar
├── .sandbox.token
├── sandbox
│   ├── bin
│   ├── cfg
│   ├── example
│   ├── install-local.sh
│   ├── lib
│   ├── module
│   ├── provider
│   └── sandbox-module

JVM-SandBox-Repeater 工程結(jié)構(gòu)參考:(源碼)

jvm-sandbox-repeater git:(master) ? tree -L 2
.
├── LICENSE
├── Readme.md
├── bin
│   ├── bootstrap.sh 
│   ├── health.sh 
│   ├── install-local.sh # 本地的啟動腳本 
│   ├── install-repeater.sh
│   ├── package.sh  # 本地的編譯腳本 ,負責(zé)編譯并把編譯好的包copy到.sandbox-module下面去
│   ├── repeater-config.json  # 默認的配置文件
│   ├── repeater-logback.xml #日志配置
│   └── repeater.properties  # 配置文件 配置錄制投遞、回放地址、配置文件獲取等信息
├── docs # 文檔使用
│   ├── plugin-development.md
│   ├── slogan-demo.md
│   └── user-guide-cn.md
├── hessian-lite # 針對hessian 進行的修改,這個地方使用的時候可以針對自己的業(yè)務(wù)進行修改
│   ├── hessian-lite.iml
│   ├── pom.xml
│   └── src
├── pom.xml
├── repeater-aide # 這是diff 相關(guān)的東西
│   ├── pom.xml  
│   └── src
├── repeater-client # 這里放了spring容器相關(guān)的操作
│   ├── pom.xml
│   └── src
├── repeater-console # 這是一個web服務(wù),主要是用于錄制數(shù)據(jù)的接收、存儲,提供配置頁面服務(wù)
│   ├── Readme.md
│   ├── pom.xml
│   ├── repeater-console-common # 這是console的 工具包
│   ├── repeater-console-dal # 這是JPA的Dao層
│   ├── repeater-console-service #  主要是JPA的相關(guān)操作
│   ├── repeater-console-start # 這是console的controller
├── repeater-module # 這里就比較有意思了,是加載配置信息的,屬于自定義的東西
│   ├── pom.xml
│   └── src
├── repeater-plugin-api  # 這是插件api,主要是一些Bean對象的定義
│   ├── pom.xml
│   └── src
├── repeater-plugin-core # 這是核心,錄制、回放、Mock、序列化等相關(guān)的實現(xiàn)都是這里
│   ├── pom.xml
│   └── src
├── repeater-plugins # 這是官方提供的插件,但是用的時候需要自己改改
│   ├── dubbo-plugin
│   ├── hibernate-plugin
│   ├── http-plugin
│   ├── ibatis-plugin
│   ├── java-plugin
│   ├── mybatis-plugin
│   ├── redis-plugin
│   ├── repeater-plugins.iml
│   ├── socketio-plugin
│   └── spring-data-jpa-plugin
│   ├── pom.xml
└── travis.sh

源碼下載下來后,可以執(zhí)行源碼目錄下 /bin中的install-local.sh編譯并把編譯好的包copy到.sandbox-module下面去

1、jvm-sandbox-console 調(diào)整配置 并 啟動

1、console源碼調(diào)整:

console代碼在idea中啟動時,不會報錯,但是使用jar包啟動時,頁面會報異常,需要做如下調(diào)整。

- 位置 repeater-console/repeater-console-start/src/main/resources/velocity 
全局替換 #parse("/blocks  為  #parse("blocks 
解決資源文件引用找不到報錯,這個替換有多處,都替換了就可以了

- 位置 repeater-console/repeater-console-start/src/main/java/com/alibaba/repeater/console/start/controller/page/ReplayController.java 
替換 return "/replay/detail"; 為 return "replay/detail"; 
解決跳轉(zhuǎn)頁面的問題

- 位置 repeater-console/repeater-console-start/src/main/java/com/alibaba/repeater/console/start/controller/test/RegressPageController.java 
替換 return "/regress/index"; 為 return "regress/index";
解決跳轉(zhuǎn)頁面的問題

2、 數(shù)據(jù)庫配置

位置:/repeater/repeater-console/repeater-console-start/src/main/resources

spring.datasource.url=jdbc:mysql://數(shù)據(jù)庫IP/域名:數(shù)據(jù)庫端口/數(shù)據(jù)庫名?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8&useSSL=false
spring.datasource.username=用戶名
spring.datasource.password=密碼

3、編譯腳本

位置:repeater/bin/package.sh
如果你的maven沒有設(shè)置環(huán)境變量,那么這里可以修改一下直接指定

# maven package the sandbox
/maven/apache-maven-3.5.3/bin/mvn clean package -Dmaven.test.skip=true -f ../pom.xml || exit_on_err 1 "package repeater failed."

4、配置文件修改

位置:repeater/bin/repeater.properties
如果你是本機器則配置成127.0.0.1或lcoalhost,如果是遠程主機部署,則配置成服務(wù)IP端口

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

# 回放結(jié)果投遞地址
broadcaster.repeat.url=http://127.0.0.1:8001/facade/api/repeat/save

# 回放消息取數(shù)據(jù)地址
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.heartbeat.url=http://127.0.0.1:8001/module/report.json

# 是否開啟脫機工作模式
repeat.standalone.mode=false

# 是否開啟spring advice攔截
repeat.spring.advice.switch=false

5、環(huán)境變量

啟動參數(shù)中的 -Dapp.name=repeater -Dapp.env=daily 
對應(yīng)應(yīng)用名和環(huán)境,是需要啟動時添加的,不然jvm-sandbox啟動后找不到對應(yīng)的環(huán)境信息

代碼一下位置讀取了這個環(huán)境變量信息
com.alibaba.jvm.sandbox.repeater.plugin.core.util.PropertyUtil
getSystemPropertyOrDefault

通過讀代碼我理解這個東西應(yīng)該是通過在被測的jvm機器上設(shè)置環(huán)境變量來搞

6、編譯啟動

執(zhí)行 bin/install-local.sh 編譯并copy代碼后

說明:
    jvm-sandbox-repeater的web工程repeater-console被改名為repeater-bootstrap.jar

    修改來自package.sh腳本
    ../repeater-console/repeater-console-start/target/repeater-console.jar ${REPEATER_TARGET_DIR}/repeater-bootstrap.jar \

正常啟動:
     java -jar -Dapp.name=repeater -Dapp.env=daily repeater-bootstrap.jar

調(diào)試啟動:
    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

訪問地址:
http://127.0.0.1:8001/config/list.htm

image.png

2、下載 并 解壓 jvm-sandbox

# 下載最新版本的 jvm-sandbox
wget http://ompc.oss-cn-hangzhou.aliyuncs.com/jvm-sandbox/release/sandbox-stable-bin.zip

# 解壓
unzip sandbox-stable-bin.zip

啟動被測 jvm 應(yīng)用

調(diào)試啟動被測試應(yīng)用

nohup "$JAVACMD" $JAVA_OPTS \
  $OPTS_MEMORY \
  -classpath "$CLASSPATH" \
  -Dbasedir="$BASEDIR" \
  -Dfile.encoding="UTF-8" \
  -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=9173 \
   app_xxx.jar \
  "$@" >${LogPath}app_xxx.log 2>&1 &

jvm-sandbox agent 啟動模式

nohup "$JAVACMD" $JAVA_OPTS \
  $OPTS_MEMORY \
  -classpath "$CLASSPATH" \
  -Dbasedir="$BASEDIR" \
  -Dfile.encoding="UTF-8" \
  -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=9173 \
  -Dapp.name=RouteVrs -Dapp.env=testA -javaagent:/home/admin/sandbox/lib/sandbox-agent.jar=server.port={jvm-sandbox控制端口}\;server.ip={當(dāng)前主機IP} \
   app_xxx.jar \
  "$@" >${LogPath}app_xxx.log 2>&1 &

在被測jvm應(yīng)用啟動中添加agent配置,用于和console通訊使用
  -Dapp.name=RouteVrs -Dapp.env=testA -javaagent:/home/admin/sandbox/lib/sandbox-agent.jar=server.port={jvm-sandbox控制端口}\;server.ip={當(dāng)前主機IP} \

jvm-sandbox attach 啟動模式

# 進入沙箱執(zhí)行腳本 attach方式進入被測jvm
cd sandbox/bin

# 目標(biāo)JVM進程33342
./sandbox.sh -p 33342 -P 55756

掛載成功后會提示
./sandbox.sh -p 33342
           NAMESPACE : default
             VERSION : 1.2.0
                MODE : ATTACH
         SERVER_ADDR : 0.0.0.0
         SERVER_PORT : 55756
      UNSAFE_SUPPORT : ENABLE
        SANDBOX_HOME : /Users/vlinux/opt/sandbox
   SYSTEM_MODULE_LIB : /Users/vlinux/opt/sandbox/module
     USER_MODULE_LIB : ~/.sandbox-module;
 SYSTEM_PROVIDER_LIB : /Users/vlinux/opt/sandbox/provider
  EVENT_POOL_SUPPORT : DISABLE

卸載沙箱
./sandbox.sh -p 33342 -S
jvm-sandbox[default] shutdown finished.

3、遠程調(diào)試

新建遠程Remote JVM Debug 填入IP及端口


image

對比 attach 和 agent 啟動模式的優(yōu)缺點

  • attach 模式

優(yōu)點

  1. 可插拔,隨時加載或卸載
  2. 更新插件或配置時,不需要重啟應(yīng)用
  3. 調(diào)試方便,可同時遠程調(diào)試repeater以及被測應(yīng)用,因為可以起兩個remote debug 端口
  4. 適合臨時使用

缺點

  1. 部分場景回放會失敗,如Java回放時無法獲取實例,會出現(xiàn)反射實例對象失敗,不能進行回放
  2. 不能緩存Java實例,需要被測應(yīng)用加載鉤子才可以使用。
  • agent 模式

優(yōu)點

  1. 回放流暢,基本 java 錄制都可以回放
  2. 適合長期使用,隨應(yīng)用部署

缺點

  1. 更新插件,需要重啟應(yīng)用
  2. 不適合同時調(diào)試repeater以及被測應(yīng)用

接下來就是 JVM-SandBox-Repeater 錄制、回放、Mock

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容