项目整合Sentinel,看以下博文
springCloud 整合 sentinel最基本入门Demo-1,接入到sintinel web控制台,并以控制台方式配置限流规则,以注解的方式定义资源_springcloud sentinel 集成demo 例子_小哇666的博客-CSDN博客
@SentinelResource属性介绍
- Value:资源名称,必需项(不能为空)
- blockHandler:处理BlockException的函数名称(可以理解对Sentinel的配置进行方法兜底)。函数要求:
- 必须是public static修饰
- 返回类型与原方法一致
- 参数类型需要和原方法相匹配,并在最后加BlockException类型的参数。
- 默认需和原方法在同一个类中,若希望使用其他类的函数,可配置blockHandlerClass,并指定blockHandlerClass里面的方法。
- 方法名不要一样,费话也要说
- blockHandlerClass:存放blockHandler的类。对应的处理函数必须是public static修饰,否则无法解析,其他要求:同blockerHandler。
- fallback:用于在抛出异常的时候提供fallback处理逻辑(可以理解为对java异常情况方法兜底)。fallback函数可以针对所有类型的异常(除了exceptionsToIgnore里面排除掉的异常类型)进行处理。函数要求:
- 必须是public static修饰
- 返回类型与原方法一致
- 参数类型需要和原方法相匹配,Sentinel 1.6开始,也可以在方法最后加Throwable类型的参数。
- 默认需和原方法在同一个类中。若希望使用其他类的函数,可配置fallbackClass,并制定fallbackClass里面的方法。
- 方法名不要一样,费话也要说
- fallbackClass:存放fallback的类。对应的处理函数必须static修饰,否则无法解析,其他要求:同fallback。
项目构建用以下的项目
springCloud 整合 sentinel最基本入门Demo-1,接入到sintinel web控制台,并以控制台方式配置限流规则,以注解的方式定义资源_springcloud sentinel 集成demo 例子_小哇666的博客-CSDN博客
1 写测试方法
@RestController
public class Controller_3 {
@SentinelResource(value = "getProduct", blockHandler = "getProduct_jiangji",fallback = "getProduct_byFallback")
@RequestMapping("/getProduct")
public String getProduct(@RequestParam(name = "type", required = false) String type,
@RequestParam(name = "name", required = false) String name) {
//模拟报错
//System.out.println(1 / 0);
return type + " " + name;
}
//sentinel流控熔断时用这个方法
public String getProduct_jiangji(String type, String name, BlockException be) {
System.out.println(be.getMessage());
return "Sentinel 流控降级热点时调用的方法";
}
//java里,自己写的程序出错走这个方法
public String getProduct_byFallback(@RequestParam(name = "type", required = false) String type,
@RequestParam(name = "name", required = false) String name,
Throwable ee) {
return "java代码运行时产生的异常(如空指针异常,运算异常等 调用的方法,没有异常时该怎么运行,怎么运行 "+type+" "+name+"--异常信息:"+ee.getMessage();
}
}
2 在sentinel控制台定义限流,降级,热点等规则,如这里用热点
3 用jmeter开始压测
a 当没达到限流规则时,且不报错,如下图,如果没达到限流的规则,且报错,就走getProduct_byFallback的方法
b 当达到限流的规则时,如下图