Kite学习历程的第三十一天
目录
1. @SentinelResource自定义限流处理逻辑
产生的需求:
- 系统默认的返回页面,没有体现出我们的业务要求
- 按照现有的添加,我们前面自定义的处理方法与业务方法耦合在一起,不直观
- 每一个业务方法,都要添加一个都处理方法,会使代码量膨胀
- 全局统一的处理方法没有体现
1.1 在cloudalibaba-sentinel-serverice8401的controller包下创建RateLimitController类来测试全局统一处理的方法
注意:
注解:
@SentinelResource中的属性
- value 属性为资源名称,可以在sentinel控制台进行配置流控规则
- blockHandlerClass: 填写全局处理的类名
- blockHandler: 填写上面类中具体的处理方法
@RestController
public class RateLimitController {
@GetMapping("/rateLimit/customerBockHandler")
@SentinelResource(value = "customerBockHandler",
blockHandlerClass = customerBockHandler.class,
blockHandler = "handlerException2")
public CommonResult customerBockHandler(){
return new CommonResult(200, "按客户自定义", new Payment(2020L, "serial003"));
}
}
1.2 创建全局处理的包myHandle,以及类customerBockHandler
其中书写了两个兜底的方法
public class customerBockHandler {
public static CommonResult handlerException(BlockException exception){
return new CommonResult(444, "按照客户自定义的,全局global exception-----------001");
}
public static CommonResult handlerException2(BlockException exception){
return new CommonResult(444, "按照客户自定义的,全局global exception-----------002");
}
}
1.3 在sentinel控制台配置customerBockHandler流控规则
一秒钟允许一次方法,过多则跳转到兜底的方法
2. 进行测试
访问:
http://localhost:8401/rateLimit/customerBockHandler
正常访问页面:
一秒钟多次访问页面:
则跳转到了兜底的方法中了
上面的测试,将处理方法与,业务方法分开,让逻辑更加的清晰可见!