一、配置初见
源码里提供的控制台截图如下:(怎么搭建自己去百度)
从中取出对应的配置如下:
{
"degrade": false, //阻断能力
"exceptionThreshold": 1000, //异常采样率
"httpEntrancePatterns": [
"^/app/v1/order/.*$"
],
"javaEntranceBehaviors": [ //主调用配置
{
"classPattern": "com.test.order.service.pay.PayService",
"includeSubClasses": false, //是否对内部类生效
"methodPatterns": [
"payCallback"
]
}
],
"javaSubInvokeBehaviors": [ //子调用配置
{
"classPattern": "com.test.backend.util.RedisUtil",
"includeSubClasses": false,
"methodPatterns": [
"*"
]
}
],
"pluginIdentities": [ //加载的插件
"redis",
"http",
"java-entrance",
"java-subInvoke",
"mybatis",
"ibatis",
"dubbo-provider",
"dubbo-consumer"
],
"repeatIdentities": [ //回放插件
"java",
"http",
"dubbo"
],
"sampleRate": 10000, //采样率,最高10000
"useTtl": true //开启ttl主子线程变量同步,主要应对多线程场景下的采集
}
接下来,我们通过源码,一步一步来看下具体的配置过程
二、启动过程
repeater插件的启动入口见com.alibaba.jvm.sandbox.repeater.module.RepeaterModule#loadCompleted, 基本流程就是:
- 拉取配置
- 初始化配置
- 发起心跳
@Override
public void loadCompleted() {
//这里启动一个线程去进行做加载,主要是为了不阻断sandbox的模块加载流程
ExecutorInner.execute(new Runnable() {
@Override
public void run() {
//standalone模式 我们在项目应用过程中是不需要考虑的,所以configManager就是DefaultConfigManager
configManager = StandaloneSwitch.instance().getConfigManager();
broadcaster = StandaloneSwitch.instance().getBroadcaster();
invocationListener