转载

jvm-sandbox-repeater学习笔记之配置说明

本文主要介绍jvm-sandbox-repeater项目中各个配置文件,包括其字段说明、配置文件作用以及修改生效的方法。

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.shpackage.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。这里有两点需要注意:

console.use.localCache
repeat.repeat.url
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学习笔记之配置说明

↙↙↙阅读原文可查看相关链接,并与作者交流

原文  http://mp.weixin.qq.com/s?__biz=MzAwNjEzMDUyNw==&mid=2650201063&idx=1&sn=ce918f5dd5a4491299736a9332ad1b2e
正文到此结束
Loading...