许昌做网站汉狮网络,十种网络推广的方法,旅游网站建设平台分析,引蜘蛛网站Sentinel实现熔断与限流
gitee#xff1a;springcloud_study: springcloud#xff1a;服务集群、注册中心、配置中心#xff08;热更新#xff09;、服务网关#xff08;校验、路由、负载均衡#xff09;、分布式缓存、分布式搜索、消息队列#xff08;异步通信#x…Sentinel实现熔断与限流
giteespringcloud_study: springcloud服务集群、注册中心、配置中心热更新、服务网关校验、路由、负载均衡、分布式缓存、分布式搜索、消息队列异步通信、数据库集群、分布式日志、系统监控链路追踪。
1. Sentinel简介
官网GitHub - alibaba/Sentinel: A powerful flow control component enabling reliability, resilience and monitoring for microservices. (面向云原生微服务的高可用流控防护组件) 中文introduction | Sentinel
Hystrix需要程序员自己搭建监控平台没有更加细粒度的流控、速率控制、服务熔断、服务降级...而Sentinel提供了细粒度的web界面的控制操作。
Sentinel下载安装
网址Releases · alibaba/Sentinel · GitHub Sentinel就是可以做服务降级、服务雪崩、服务熔断、服务限流。
Sentinel的后台有两部份组成 核心库(Java客户端不依赖任何框架/库能够运行于所有Java运行时环境同时对 Dubbo /Spring Cloud等框架也有较好的支持。 控制台(Dashboard)基于Spring Boot开发打包后可以直接运行不需要额外的Tomcat等应用容器。
Sentinel下载下来是一个jar包运行命令java -jar ......
访问
默认密码和用户sentinel
2. Sentinel初始化演示工程
2.1 Sentinel初始化监控
创建cloudalibaba-sentinel-service8401项目 pom文件
dependencygroupIdcom.alibaba.cloud/groupIdartifactIdspring-cloud-starter-alibaba-sentinel/artifactId
/dependency application.yaml
server:port: 8401spring:application:name: cloudalibaba-sentinel-servicecloud:nacos:discovery:#服务注册中心server-addr: localhost:8848sentinel:transport:#配置dashboard地址dashboard: localhost:8080#默认端口8719假如被占用会自动从8719开始依次1扫描,直至找到未被古用的端口port: 8719
management:endpoints:web:exposure:include: * 主启动类
SpringBootApplication
EnableDiscoveryClient
public class MainApp8401 {public static void main(String[] args) {SpringApplication.run(MainApp8401.class,args);}
} controller层
RestController
public class FlowLimitController {
GetMapping(/testA)public String testA(){return --------testA;}
GetMapping(/testB)public String testB(){return --------testB;}
}
测试 Sentinel使用的是懒加载机制需要先进行ip地址访问才会出现 3. Sentinel流控规则简介 流控规则 资源名:唯一名称默认请求路径 针对来源: Sentinel可以针对调用者进行限流填写微服务名默认default(不区分来源) 阈值类型/单机阈值: QPS(每秒钟的请求数量):当调用该api的QPS达到阈值的时候进行限流。 线程数:当调用该api伯的线程数达到阈值的时候进行限流 是否集群:不需要集群 流控模式: 直接:api达到限流条件时直接限流 关联:当关联的资源达到阈值时就限流自己 链路:只记录指定链路上的流量指定资源从入口资源进来的流量如果达到阈值就进行限流)【api级别的针对来源】 流控效果: 快速失败:直接失败抛异常 Warm Up:根据codeFactor (冷加载因子默认3)的值从阈值/codeFactor经过预热时长才达到设置的QPS阈值 排队等待:匀速排队让请求以匀速的速度通过阈值类型必须设置为QPS否则无效
3.1 Sentinel流控-QPS直接失败
直接-快速失败系统默认QPS每秒请求数单机阈值设置为1如果超过1则报错处理。一秒一次可以超出报错
测试 3.2 Sentinel流控-线程数直接失败
线程数每一秒线程数到达阈值就进行限流表示只有一个线程进行处理如果一个线程处理来不及就会报错。
修改cloudalibaba-sentinel-service8401项目的controller层
RestController
public class FlowLimitController {
GetMapping(/testA)public String testA(){//线程数测试模拟暂停毫秒try{TimeUnit.MICROSECONDS.sleep(8000);} catch (InterruptedException e) {e.printStackTrace();}return --------testA;}
GetMapping(/testB)public String testB(){return --------testB;}
}
设置
测试 3.3 Sentinel流控-关联
关联关联到限流条件时直接限流。A与B关联设置A的关联限流只要B资源请求有限时A会出现报错。
设置
测试 3.4 Sentinel流控-预热Warm up
流控效果直接-快速失败默认的流控处理源代码com.alibaba.csp.sentinel.slots.block.flow.controller.DefaultController
预热公式-阈值除以coldFactor(默认值为3),经过预热时长后才会达到阈值。 官网默认coldFactor为3即请求QPS 从threshold阈值 / 3开始经预热时长逐渐升至设定的QPS阈值。 限流-冷启动Home · alibaba/Sentinel Wiki · GitHub限流---冷启动 源代码com.alibaba.csp.sentinel.slots.block.flow.controller.WarmUpController
测试
https://live.csdn.net/v/355136
3.5 Sentinel流控-排队等待
匀速排队让请求以均匀的速度通过阀值类型必须设成QPS否则无效。匀速排队 RuleConstant.CONTROL_BEHAVIOR_RATE_LIMITER方式会严格控制请求通过的间隔时间也即是让请求以均匀的速度通过对应的是漏桶算法。详细文档可以参考流量控制–匀速器被式具体的例子可以参见 PaceFlowDemo。
设置 修改cloudalibaba-sentinel-service8401项目的controller层
RestController
Slf4j
public class FlowLimitController {
GetMapping(/testA)public String testA(){
// //线程数测试模拟暂停毫秒
// try{
// TimeUnit.MICROSECONDS.sleep(8000);
// } catch (InterruptedException e) {
// e.printStackTrace();
// }log.info(Thread.currentThread().getName()\t....testA);return --------testA;}
GetMapping(/testB)public String testB(){return --------testB;}
}
测试 4. Sentinel降级简介
视频使用的是1.7.0sentinel但是自己使用sentienl1.8.6界面有不同并且1.8.6添加更多功能但跟着视频学习 官网Home · alibaba/Sentinel Wiki · GitHub焰断降级
RT(平均响应时间,秒级)平均响应时间超出阈值且在时间窗口内通过的请求5两个条件同时满足后触发降级窗口期过后关闭断路器RT最大4900(更大的需要通过-Dcsp.sentinel.statistic.max.rtXXXX才能生效)
异常比列(秒级)QPS 5且异常比例(秒级统计超过阈值时触发降级;时间窗口结束言关闭降级
异常数(分钟级)异常数(分钟统计)超过阈值时触发降级;时间窗口结束后关闭降级
Sentinel的断路器是没有半开状态的。不会像hystrix有半开的状态进行连接测试检查。
4.1 Sentinel降级-RT
RT平均响应时间 DEGRADE_GRADE_RT ):当1s内持续进入5个请求对应时刻的平均响应时间(秒级)均超过阈值count ,以ms为单位)那么在接下的时间窗口 DegradeRule中的timewindow 以s 为单位)之内,对这个方法的调用都会自动地熔断(抛出DegradeException )。注意Sentinel默认统计的RT上限是4900 ms超出此阈值的都会算作4900ms若需要变更此上限可以通过启动配置项-Dcsp.sentinel.statistic.max.rtmxxx来配置。
修改cloudalibaba-sentinel-service8401项目的controller层
RestController
Slf4j
public class FlowLimitController {
GetMapping(/testA)public String testA(){
// //线程数测试模拟暂停毫秒
// try{
// TimeUnit.MICROSECONDS.sleep(8000);
// } catch (InterruptedException e) {
// e.printStackTrace();
// }log.info(Thread.currentThread().getName()\t....testA);return --------testA;}
GetMapping(/testB)public String testB(){return --------testB;}
GetMapping(/testD)public String testD(){try{TimeUnit.SECONDS.sleep(1);} catch (InterruptedException e) {e.printStackTrace();}return --------testD;}
}
配置 测试 4.2 Sentinel降级-异常比例
异常比例( DEGRADE_GRADE_EXCEPTION_RATIo):当资源的每秒请求量 5并且每秒异常总数占通过量的比值超过阈值 DegradeRule中的count 之后资源进入降级状态即在接下的时间窗口 DegradeRule 中的 timewindow以s为单位之内对这个方法的调用都会自动地返回。异常比率的阈值范围是[0.0,1.0]代表0%- 100%。
修改cloudalibaba-sentinel-service8401项目的controller层
GetMapping(/testD)public String testD(){int age10/0;return --------testD;}
配置 测试 停止jmeter: 4.3 Sentinel降级-异常数
异常数(DEGRADE_GRADE_EXCEPTION_COUNT ):当资源近1分钟的异常数目超过阈值之后会进行熔断。注意由于统讣时间窗口是分钟级别的若 timelWindow小于60s则结束熔断状态后仍可能再进入熔断状态。
修改cloudalibaba-sentinel-service8401项目的controller层
GetMapping(/testD)public String testD(){int age10/0;return --------testD;}
配置 测试 5. Sentinel热点key
5.1 Sentinel热点上 热点数据限流就是频繁访问的数据可以根据参数传递进行限流等。
热点限流源代码com.alibaba.csp.sentinel.slots.block.BlockException
修改cloudalibaba-sentinel-service8401项目的controller层
GetMapping(/testHotKey)SentinelResource(value testHotkey,blockHandler deal_testHotKey)public String testHotKey(RequestParam(value p1,required false)String p1,RequestParam(value p2,required false)String p2){return --------testHotKey;}public String deal_testHotKey(String p1, String p2, BlockException e){return ------------deal_testHotKey;}
配置 测试这个必须是注解绑定有效url那个地址没有效果不知道 如果使用热点限流主要加上blockHandler进行降级处理。
5.2 参数例外项
参数根据参数值进行不同的限流控制例如p1参数值为5的时候进行限流为其他的值就是通用的限流方式。
配置 测试
https://live.csdn.net/v/355138
SentinelResource
处理的是sentine1控制台配置的违规情况有blockHandler方法配置的兜底处理;
RuntimeException
int age 10/0,这个是java运行时报出的运行时异常RunTimeExceptionSentinelResource不管
总结
SentinelResource主管配置出错,运行出错该走异常走异常
6. 系统规则
官网Home · alibaba/Sentinel Wiki · GitHub系统自适应限流 系统规则就相当于给整个系统添加一层流控是给每一个api接口但是这样实现不了细粒度的流控所以一般不会怎么使用。
Load自适应(仅对系统的 load1作为启发指标。进行自适应系统保护。当系统load1超过设定的启发值且系统当前的并发线程数超过估算的系统容量时才会触发系统保护BBR阶段)。系统容量由系统的 maxQps * minRt估算得出。设定参考值一般是cpu cores* 2.5。
CPU usage(1.5.0版本):当系统CPU使用率超过阈值即触发系统保护(取值范围0.0-1.0)比较灵敏。
平均RT;当单台机器上所有入口流量的平均RT达到阈值即触发系统保护单位是毫秒。
并发线程数:当单台机器上所有入口流量的并发线程数达到阈值即触发系统保护。
入口QPS:当单台机器上所有入口流量的QPS 达到阈值即触发系统保护。
测试一系统QPS 配置 测试 7. SentinelResource配置
7.1 按资源名称限流后续处理
修改cloudzlibaba-sentinel-service8401项目
1.添加RateLimitController
RestController
public class RateLimitController {GetMapping(/byResource)SentinelResource(value byResource,blockHandler handleException)public CommonResult byResource(){return new CommonResult(200,按资源名称限流测试ok,new Payment(2020L,serial001));}public CommonResult handleException(BlockException exception){return new CommonResult(444,exception.getClass().getCanonicalName()\t服务不可用);}
}
配置 测试 流控规则是临时的。
7.2 按照Url地址限流后续处理
修改cloudalibaba-sentinel-service8401项目
1.修改RateLimitController
RestController
public class RateLimitController {GetMapping(/byResource)SentinelResource(value byResource,blockHandler handleException)public CommonResult byResource(){return new CommonResult(200,按资源名称限流测试ok,new Payment(2020L,serial001));}public CommonResult handleException(BlockException exception){return new CommonResult(444,exception.getClass().getCanonicalName()\t服务不可用);}GetMapping(/rateLimit/byUrl)SentinelResource(value byUrl)public CommonResult byUrl(){return new CommonResult(200,按url限流测试ok,new Payment(2020L,serial002));}
}
配置 测试 上面的问题
1系统默认的没有体现我们自己的业务要求。
2依照现有条件我们自定义的处理方法又和业务代码耦合在一块不直观。
3 每个业务方法都添加—个兜底的那代码膨胀加剧。
4全局统—的处理方法没有体现。
7.3 客户自定义限流处理逻辑
创建CustomerBlockHandler类用于自定义限流处理逻辑
public class CustomerBlockHandler {public static CommonResult handlerException1(BlockException exception){return new CommonResult(4444,按客户自定义限流测试异常处理1,全局异常处理一);}public static CommonResult handlerException2(BlockException exception){return new CommonResult(4444,按客户自定义限流测试异常处理2全局异常处理二);}
}
controller层
GetMapping(/rateLimit/customerBlockHandler)SentinelResource(value customerBlockHandler,blockHandlerClass CustomerBlockHandler.class,blockHandler handlerException1)public CommonResult customerBlockHandler(){return new CommonResult(200,按客户自定义限流测试ok,new Payment(2020L,serial003));}
配置 测试 SentinelResource不支持private修饰。Sentinel主要有三个核心ApiSphU定义资源、Tracer定义统计、ContextUtil定义了上下文。
8. 服务熔断功能
sentinel整合ribbonopenfenginfallback实现负载均衡远程调用服务熔断
8.1 SentinelRibbon
创建服务消费者cloudalibaba-consumer-order84项目 pom文件
dependencies!--后面会使用到持久化--dependencygroupIdcom.alibaba.csp/groupIdartifactIdsentinel-datasource-nacos/artifactId/dependencydependencygroupIdcom.alibaba.cloud/groupIdartifactIdspring-cloud-starter-alibaba-sentinel/artifactId/dependencydependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-starter-openfeign/artifactId/dependencydependencygroupIdcom.alibaba.cloud/groupIdartifactIdspring-cloud-starter-alibaba-nacos-discovery/artifactId/dependencydependencygroupIdcom.yicai.springcloud/groupIdartifactIdcloud-api-commons/artifactIdversion1.0-SNAPSHOT/version/dependency!-- spring-boot-web 启动类--dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-web/artifactId/dependency!-- spring-boot-actuator 健康监控--dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-actuator/artifactId/dependency!-- 热更新--dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-devtools/artifactIdscoperuntime/scopeoptionaltrue/optional/dependencydependencygroupIdorg.projectlombok/groupIdartifactIdlombok/artifactIdoptionaltrue/optional/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-test/artifactIdscopetest/scope/dependency/dependencies yaml文件
server:port: 84
spring:application:name: nacos-order-consumercloud:nacos:discovery:
# server-addr: 192.168.25.153:1111server-addr: localhost:8848sentinel:transport:#配置dashboard地址dashboard: localhost:8080#默认端口8719假如被占用会自动从8719开始依次1扫描,直至找到未被古用的端口port: 8719
management:endpoints:web:exposure:include: * 主启动类
SpringBootApplication
EnableDiscoveryClient
public class OrderMain84 {public static void main(String[] args) {SpringApplication.run(OrderMain84.class,args);}
} controller层
RestController
Slf4j
public class OrderController {public static final String SERVICE_URL http://nacos-payment-provider;
Resourceprivate RestTemplate restTemplate;
RequestMapping(/consumer/fallback/{id})SentinelResource(value fallback)public CommonResultPayment fallback(PathVariable Long id){CommonResultPayment resultrestTemplate.getForObject(SERVICE_URL/paymentSQL/id,CommonResult.class,id);if(id4){throw new IllegalArgumentException(IllegalArgumentException,非法参数异常...);}else if(result.getData()null){throw new NullPointerException(NullPointerException,该ID没有对应记录,空指针异常...);}return result;}
} config
Configuration
public class ApplicationConfig {BeanLoadBalancedpublic RestTemplate getRestTemplate(){return new RestTemplate();}
}
创建服务提供者cloudalibaba-provider-payment9003/9004项目 pom文件
dependencies
dependencygroupIdcom.alibaba.cloud/groupIdartifactIdspring-cloud-starter-alibaba-nacos-discovery/artifactId/dependencydependencygroupIdcom.yicai.springcloud/groupIdartifactIdcloud-api-commons/artifactIdversion1.0-SNAPSHOT/version/dependency!-- spring-boot-web 启动类--dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-web/artifactId/dependency!-- spring-boot-actuator 健康监控--dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-actuator/artifactId/dependency!-- 热更新--dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-devtools/artifactIdscoperuntime/scopeoptionaltrue/optional/dependencydependencygroupIdorg.projectlombok/groupIdartifactIdlombok/artifactIdoptionaltrue/optional/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-test/artifactIdscopetest/scope/dependency/dependencies application.yml
server:port: 9003
spring:application:name: nacos-payment-providercloud:nacos:discovery:
# server-addr: 192.168.25.153:1111server-addr: localhost:8848
management:endpoints:web:exposure:include: * 主启动
SpringBootApplication
EnableDiscoveryClient
public class PaymentMain9003 {public static void main(String[] args) {SpringApplication.run(PaymentMain9003.class,args);}
} controller层
RestController
public class PaymentController {Value(${server.port})private String serverPort;public static HashMapLong,Payment hashMapnew HashMapLong, Payment();static {hashMap.put(1L,new Payment(1L,1111111111111111));hashMap.put(2L,new Payment(2L,2222222222222222));hashMap.put(3L,new Payment(3L,3333333333333333));}GetMapping(value /paymentSQL/{id})public CommonResultPayment paymentSQL(PathVariable(id)Long id){Payment payment hashMap.get(id);CommonResultPayment resultnew CommonResult(200,from mysql,serverPort:serverPort,payment);return result;}
}
测试 8.2 fallback使用和blockHandler使用
fallback处理java运行时异常
修改cloudalibaba-consumer-order84项目的controller层
RestController
Slf4j
public class OrderController {public static final String SERVICE_URL http://nacos-payment-provider;
Resourceprivate RestTemplate restTemplate;
RequestMapping(/consumer/fallback/{id})SentinelResource(value fallback,fallback handlerFallback)public CommonResultPayment fallback(PathVariable Long id){CommonResultPayment resultrestTemplate.getForObject(SERVICE_URL/paymentSQL/id,CommonResult.class,id);if(id4){throw new IllegalArgumentException(IllegalArgumentException,非法参数异常...);}else if(result.getData()null){throw new NullPointerException(NullPointerException,该ID没有对应记录,空指针异常...);}return result;}
//fallbackpublic CommonResult handlerFallback(PathVariable Long id,Throwable e){Payment paymentnew Payment(id,null);return new CommonResult(444,兜底异常handlerFallback,exception内容e.getMessage(),payment);}
}
测试 blockHandler处理的是配置的限流报错处理
修改cloudalibaba-consumer-order84项目的controller层
RestController
Slf4j
public class OrderController {public static final String SERVICE_URL http://nacos-payment-provider;
Resourceprivate RestTemplate restTemplate;
RequestMapping(/consumer/fallback/{id})
// SentinelResource(value fallback,fallback handlerFallback)SentinelResource(value fallback,blockHandler blockHandler)public CommonResultPayment fallback(PathVariable Long id){CommonResultPayment resultrestTemplate.getForObject(SERVICE_URL/paymentSQL/id,CommonResult.class,id);if(id4){throw new IllegalArgumentException(IllegalArgumentException,非法参数异常...);}else if(result.getData()null){throw new NullPointerException(NullPointerException,该ID没有对应记录,空指针异常...);}return result;}
//blockHandlerpublic CommonResult blockHandler(PathVariable Long id, BlockException blockException){Payment paymentnew Payment(id,null);return new CommonResult(444,sentinel限流兜底blockHandler,exception内容blockException.getMessage(),payment);}
//fallback
// public CommonResult handlerFallback(PathVariable Long id,Throwable e){
// Payment paymentnew Payment(id,null);
// return new CommonResult(444,兜底异常handlerFallback,exception内容e.getMessage(),payment);
// }
}
配置 测试 fallback和blockHandler合并处理
修改cloudalibaba-consumer-order84项目的controller层
RestController
Slf4j
public class OrderController {public static final String SERVICE_URL http://nacos-payment-provider;
Resourceprivate RestTemplate restTemplate;
RequestMapping(/consumer/fallback/{id})SentinelResource(value fallback,fallback handlerFallback,blockHandler blockHandler)
// SentinelResource(value fallback,blockHandler blockHandler)public CommonResultPayment fallback(PathVariable Long id){CommonResultPayment resultrestTemplate.getForObject(SERVICE_URL/paymentSQL/id,CommonResult.class,id);if(id4){throw new IllegalArgumentException(IllegalArgumentException,非法参数异常...);}else if(result.getData()null){throw new NullPointerException(NullPointerException,该ID没有对应记录,空指针异常...);}return result;}
//blockHandlerpublic CommonResult blockHandler(PathVariable Long id, BlockException blockException){Payment paymentnew Payment(id,null);return new CommonResult(444,sentinel限流兜底blockHandler,exception内容blockException.getMessage(),payment);}
//fallbackpublic CommonResult handlerFallback(PathVariable Long id,Throwable e){Payment paymentnew Payment(id,null);return new CommonResult(444,兜底异常handlerFallback,exception内容e.getMessage(),payment);}
}
配置 测试 8.3 exceptionToIgnore忽略属性
修改cloudalibaba-consumer-order84项目的controller层
SentinelResource(value fallback,fallback handlerFallback,blockHandler blockHandler,exceptionsToIgnore {IllegalArgumentException.class})
测试 修改cloudalibaba-consumer-order84项目 pom文件
dependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-starter-openfeign/artifactId
/dependency application.yaml
#激活sentinel对feign的支持
feign:sentinel:enabled: true 主启动类激活EnableFeignClients service
FeignClient(value nacos-payment-provider,
fallback PaymentFallbackService.class)
public interface PaymentService {GetMapping(value /paymentSQL/{id})CommonResultPayment paymentSQL(PathVariable(id) Long id);
}
Component
public class PaymentFallbackService implements PaymentService{Overridepublic CommonResultPayment paymentSQL(Long id) {return new CommonResult(444,服务降级返回-----paymentfallbackservice,new Payment(id,error));}
} controller
Resourceprivate PaymentService paymentService;
GetMapping(value /consumer/paymentSQL/{id})public CommonResultPayment paymentSQL(PathVariable(id) Long id){return paymentService.paymentSQL(id);}
测试 8.5 规则持久化
一旦我们重启应用sentinel规则将消失生产环境需要将配置规则进行持久化
设置将限流配置规则持久化进Nacos保存只要刷新8401某个rest地址sentinel控制台的流控规则就能看到只要Nacos里面的配置不删除针对8401上sentinel上的流控规则持续有效。
步骤修改cloud-sentinel-service8401项目 pom文件
dependencygroupIdcom.alibaba.csp/groupIdartifactIdsentinel-datasource-nacos/artifactId
/dependency application.yaml
server:port: 8401
spring:application:name: cloudalibaba-sentinel-servicecloud:nacos:discovery:#服务注册中心server-addr: localhost:8848sentinel:transport:#配置dashboard地址dashboard: localhost:8080#默认端口8719假如被占用会自动从8719开始依次1扫描,直至找到未被古用的端口port: 8719datasource:ds1:nacos:server-addr: localhost:8848dataId: ${spring.application.name}groupId: DEFAULT_GROUPdata-type: jsonrule-type: flow 配置
[{resource:/rateLimit/byUrl,limitApp:default,grade:1,count:1,streategy:0,controlBehavior:0,clusterMode:false}
] resource:资源名称; limitApp:来源应用; grade:阈值类型0表示线程数1表示QPS; count:单机阈值; strategy:流控模式0表示直接1表示关联2表示链路; controlBehavior:流控效果0表示快速失败,1表示Warm Up2表示排队等待; clusterMode是否集群。
测试启动8401观察初次可能需要调用接口sentinel界面才会出现