[jvm-sandbox-repeater 學習筆記][入門使用篇] 2 配置說明
本文主要介紹 jvm-sandbox-repeater 專案中各個配置檔案,包括其欄位說明、配置檔案作用以及修改生效的方法。
系列文章導航:
[jvm-sandbox-repeater 學習筆記][入門使用篇] 1 安裝與啟動
[jvm-sandbox-repeater 學習筆記][入門使用篇] 2 配置說明(本文)
[jvm-sandbox-repeater 學習筆記][入門使用篇] 3 現有介面說明
[jvm-sandbox-repeater 學習筆記][入門使用篇] 4 錄製、回放與除錯
2.1 錄製回放配置
如果需要針對自己的專案進行錄製入口和配置的調整,則需要進行錄製回訪配置的調整。
2.1.1 錄製回放配置欄位說明
這個配置的解讀,主要依賴com.alibaba.jvm.sandbox.repeater.plugin.domain.RepeaterConfig
類以及呼叫到這個類中方法的邏輯的說明。
配置名 | 配置含義 | 引數說明 | 備註 |
---|---|---|---|
pluginIdedentities | 錄製所使用的外掛列表,配置了相應的外掛名稱,才能啟用對應類別外掛類別的錄製 | 外掛名稱 有效值有:"http", "java-entrance", "java-subInvoke", "mybatis", "redis","ibatis","dubbo-consumer","dubbo-provider" |
1、外掛配置生效還需要~/.sandbox-module/plugins/ 有對應的外掛 jar 包。2、該引數有效值欄位對應的取值是原始碼中實現了 InvokePlugin 的類的identity 方法。 |
repeatIdentities | 回放所使用的外掛列表,配置了對應的外掛,才能進行對應類別的回放 | 外掛名稱 有效值有:"http", java", "dubbo" |
1、外掛配置生效還需要~/.sandbox-module/plugins/ 有對應的外掛 jar 包。2、該引數有效值欄位對應的取值是原始碼中實現了 Repeater 的類的identity 方法。 |
httpEntrancePatterns | 需要錄製和回放的 http 介面 需要同時在 pluginIdedentities 和 repeatIdentities 中都配置了 http 這個配置才生效 |
連結的路徑 | 引數支援正規表示式:"^/alertService/.*$"
|
javaSubInvokeBehaviors | 需要錄製和 mock 的 java 方法的配置 需要 pluginIdedentities 配置了 java-subInvoke 這個配置才生效 |
類名、方法名、以及是否包含子方法(若為 true,則匹配該類下的所有子類或者實現類,實際是否可用,有待驗證),支援正規表示式 | 如下配置的意思就是 com.test.server.utils 包下所有類和所有方法 { "classPattern": "com.test.server.utils.*", "methodPatterns": [ "*" ], "includeSubClasses": false } |
javaEntranceBehaviors | 需要錄製和回放的 java 方法的入口 需要同時在 pluginIdedentities 配置了 java-entrance 以及 repeatIdentities 配置了java 這個配置才生效 |
類名、方法名、以及是否包含子方法(若為 true,則匹配該類下的所有子類或者實現類,實際是否可用,有待驗證),支援正規表示式 | 如下配置的意思就是 com.test.utils 包下所有類和所有方法 { "classPattern": "com.test.utils.*", "methodPatterns": [ "*" ], "includeSubClasses": false } 如果該入口方法在某個 http 入口的呼叫鏈路下,可能不會被錄製到,如 com.test.controller.hello() 方法,本身對應著 “/hello 的訪問路徑,則錄製時無法錄製到以這個 hello 方法為入口的 java 錄製記錄” |
pluginsPath | 外掛路徑 | String,預設填 null 即可 | 預設填 null 即可 |
exceptionThreshold | 異常發生閾值;預設 1000 當ExceptionAware 感知到異常次數超過閾值後,會降級模組 |
Integer,預設填 1000 即可 | 當前只使用過 1000,未出現過降級情況。 當出現降級則不再進行任何錄製。 涉及的關鍵方法: com.alibaba.jvm.sandbox.repeater.plugin.core.impl.api.DefaultEventListener#access
|
degrade | 開啟之後,不進行錄製,只處理回放請求 | boolean,預設填 false 即可 | 當前只使用過 false 按照字面理解就是當這個改為 true 之後,不再進行錄製。 涉及的關鍵方法: com.alibaba.jvm.sandbox.repeater.plugin.core.impl.api.DefaultEventListener#access
|
useTtl | 是否開啟 ttl 執行緒上下文切換 開啟之後,才能將併發執行緒中發生的子呼叫記錄下來,否則無法錄製到併發子執行緒的子呼叫資訊 原理是將住執行緒的 threadLocal 複製到子執行緒,執行任務完成後恢復 |
boolean,預設填 true 即可 | 預設使用 true,開啟執行緒跟蹤 |
sampleRate | 取樣率;最小粒度萬分之一 | Integer 預設填 10000 即可 | 當前只使用過 10000,可以結合這個方法理解com.alibaba.jvm.sandbox.repeater.plugin.core.trace.TraceContext#inTimeSample
|
2.1.2 在哪裡調整錄製回放配置
在非 standalone 模式下,會從 repeater-console 的 /facade/api/config/${appName}/${env}
介面中拉取配置。
在 standalone 模式下則讀取~/.sandbox-module/cfg/repeater-config.json
下的配置。
2.1.2.1 非 standalone 模式下
按照官方提供的例子,修改為com.alibaba.repeater.console.start.controller.ConfigFacadeApi#getConfig
方法,重新組裝RepeaterConfig
物件。
PS:修改之後,repeater-console 獲取配置的介面需要重啟後才能返回修改後的配置內容。
package com.alibaba.repeater.console.start.controller;
/**
* {@link ConfigFacadeApi} Demo工程;作為repeater錄製回放的配置管理服務
* <p>
*
* @author zhaoyb1990
*/
@RestController
@RequestMapping("/facade/api")
public class ConfigFacadeApi {
@RequestMapping("/config/{appName}/{env}")
public RepeaterResult<RepeaterConfig> getConfig(@PathVariable("appName") String appName,
@PathVariable("env") String env) {
// 自己存配置;目前直接Mock了一份
RepeaterConfig config = new RepeaterConfig();
List<Behavior> behaviors = Lists.newArrayList();
config.setPluginIdentities(Lists.newArrayList("http", "java-entrance", "java-subInvoke", "mybatis", "ibatis"));
// 回放器
config.setRepeatIdentities(Lists.newArrayList("java", "http"));
// 白名單列表
config.setHttpEntrancePatterns(Lists.newArrayList("^/regress/.*$"));
// java入口方法
behaviors.add(new Behavior("com.alibaba.repeater.console.service.impl.RegressServiceImpl", "getRegress"));
config.setJavaEntranceBehaviors(behaviors);
List<Behavior> subBehaviors = Lists.newArrayList();
// java呼叫外掛
subBehaviors.add(new Behavior("com.alibaba.repeater.console.service.impl.RegressServiceImpl", "getRegressInner"));
subBehaviors.add(new Behavior("com.alibaba.repeater.console.service.impl.RegressServiceImpl", "findPartner"));
subBehaviors.add(new Behavior("com.alibaba.repeater.console.service.impl.RegressServiceImpl", "slogan"));
config.setJavaSubInvokeBehaviors(subBehaviors);
config.setUseTtl(true);
return RepeaterResult.builder().success(true).message("operate success").data(config).build();
}
}
PS: 可以自行調整這個介面,改為讀取檔案的模式,這樣可以做到修改配置不需要重啟 repeater-console。
2.1.2.2 standalone 模式下
直接修改~/.sandbox-module/cfg/repeater-config.json
檔案中的內容。
PS:修改後,如果本地重新安裝了 repeater 則會恢復到沒有修改的情況。如果想知道怎麼樣重新安裝都不會被重置,那就看看 bin 目錄下的install-local.sh
、package.sh
瞭解下安裝過程都幹了啥。
2.1.3 調整配置後,如何生效
repeater 會在啟動過程中拉取配置。
2.1.3.1 重啟 repeater(可用)
參考1.4 repeater啟動與關閉
章節中的啟動與關閉相關命令,進行 repeater 重啟。啟動過程將會重新從 repeater-console 拉取配置。standalone 模式下也會重新讀取配置。
2.1.3.2 使用 repeaterModule 中的介面更新配置(不可用,repeater 有缺陷有待完善)
在com.alibaba.jvm.sandbox.repeater.module.RepeaterModule
類中,實現了推送配置更新的介面。
可透過訪問http://${repeater.ip}:${repeater.port}/sandbox/default/module/http/repeater/pushConfig
介面,將配置的內容序列化後傳輸過去。
PS:但是由於 repeater 外掛中只有 JavaSubInvokePlugin 外掛實現了 onConfigChange 方法,所以這個介面功能並不完善。
2.2 其他配置
2.2.1 repeater-logback.xml
該配置檔案主要是控制 repeater 的日誌列印路徑地址以及列印等級。
一般會在需要調整日誌等級的時候修改。
實際生效的配置是位於~/.sandbox-module/cfg 中的 repeater-logback.xml。
在專案的 bin 目錄下也有一份 repeater-logback.xml,這份是在執行安裝指令碼的時候會被複制到~/.sandbox-module/cfg 下的。
每次修改這份配置,都需要重啟 repeater 才能生效。
<?xml version="1.0" encoding="UTF-8" ?>
<configuration scan="true" scanPeriod="10000">
<appender name="REPEATER-FILE-APPENDER" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!--日誌檔案地址-->
<file>${user.home}/logs/sandbox/repeater/repeater.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!--歷史日誌檔案地址-->
<FileNamePattern>${user.home}/logs/sandbox/repeater/repeater.log.%d{yyyy-MM-dd}</FileNamePattern>
<!--歷史日誌最大儲存天數-->
<MaxHistory>30</MaxHistory>
</rollingPolicy>
<encoder>
<!--日誌格式-->
<pattern>%d{yyyy-MM-dd HH:mm:ss} %-5level %msg%n</pattern>
<charset>UTF-8</charset>
</encoder>
</appender>
<!--日誌等級-->
<root level="info">
<appender-ref ref="REPEATER-FILE-APPENDER"/>
</root>
</configuration>
2.2.2 repeater.properties
該配置檔案主要是 repeater 是否以 standalone 模式執行,以及以非 standalone 模式執行時與 repeater-console 互動的 url 路徑。
一般會在需要調整 repeater-console 地址的時候進行修改。repeat.standalone.mode
一般用 false,使用非 standalone 模式。
實際生效的配置是位於~/.sandbox-module/cfg 中的 repeater.properties。
在專案的 bin 目錄下也有一份 repeater.properties,這份是在執行安裝指令碼的時候會被複制到~/.sandbox-module/cfg 下的。
每次修改這份配置,都需要重啟 repeater 才能生效。
如下的配置,http://127.0.0.1:8001 為 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
2.2.3 repeater-console 的 application.properties
位於 jvm-sandbox-repeater/repeater-console/repeater-console-start/src/main/resources/application.properties。
就是普通 springboot 應用的 application.properties。這裡有兩點需要注意:
- 目前官方版本的 mysql 儲存尚未完善,所以
console.use.localCache
只能選用 false,使用記憶體儲存模式。使用記憶體儲存模式意味著每一次重啟 repeater-console 都會丟失所有記錄。 -
repeat.repeat.url
對應的是 repeater 推送回放任務的地址,所以如果本地的 repeater 不是以 8820 埠啟動,或者非本地的 repeater,需要相應修改這個地址的 ip 和埠。
spring.application.name=repeater-server
server.port=8001
mybatis.type-aliases-package=com.alibaba.repeater.console.dal.model
# 本地mysql資料來源測試
spring.datasource.url=jdbc:mysql://localhost:13306/repeater?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8&useSSL=false
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
# 使用本地資料來源進行測試
console.use.localCache=false
# 觸發repeater執行回放任務的回放地址
repeat.repeat.url=http://127.0.0.1:8820/sandbox/default/module/http/repeater/repeat
相關文章
- [jvm-sandbox-repeater 學習筆記][原理說明篇] 2 回放流程JVM筆記
- [jvm-sandbox-repeater 學習筆記][原理說明篇] 1 錄製流程JVM筆記
- pandas 學習筆記 (入門篇)筆記
- MySQL學習筆記---入門使用MySql筆記
- substrate學習筆記2:substrate快速入門筆記
- Asp.Net Core學習筆記:入門篇ASP.NET筆記
- 深度學習入門筆記——Transform的使用深度學習筆記ORM
- 深度學習入門筆記——DataLoader的使用深度學習筆記
- 人臉識別學習筆記一:入門篇筆記
- git入門學習筆記Git筆記
- Docker入門學習筆記Docker筆記
- Unity學習筆記--入門Unity筆記
- TS入門學習筆記筆記
- 【PostgreSQL】入門學習筆記SQL筆記
- 《深度學習入門》第 2 章 感知機 筆記深度學習筆記
- Latex排版學習筆記(2)——Latex新手入門教程筆記
- JavaScript入門學習學習筆記(上)JavaScript筆記
- HTML入門學習筆記(二)HTML筆記
- React入門指南(學習筆記)React筆記
- Go 入門指南學習筆記Go筆記
- Dubbo學習筆記(一) 入門筆記
- JavaScript入門-學習筆記(一)JavaScript筆記
- Redis基礎知識(學習筆記7--關鍵引數配置說明)Redis筆記
- Django學習筆記(6-2 使用者登入-2)Django筆記
- JavaScript學習筆記1—快速入門JavaScript筆記
- iOS學習筆記39 ReactiveCocoa入門iOS筆記React
- redis學習筆記1: Redis入門Redis筆記
- webpack 學習筆記:入門介紹Web筆記
- node 學習筆記 基礎入門筆記
- python學習筆記——jieba庫入門Python筆記Jieba
- Elasticsearch入門學習重點筆記Elasticsearch筆記
- CANopen學習筆記(一)CANopen入門筆記
- 【Laravel 入門教程】學習筆記 1Laravel筆記
- 【MongoDB學習筆記】MongoDB 快速入門MongoDB筆記
- java學習筆記1(入門級)Java筆記
- 爬蟲入門學習筆記3爬蟲筆記
- 記一次flink入門學習筆記筆記
- 數學證明 學習筆記筆記