因为业务代码和错误处理代码耦合在一起,这样代码会膨胀,而且可读性太差。所以需要一个类专门写兜底代码。
@GetMapping("/rateLimit/consumerHandler")
@SentinelResource(value = "consumerHandler",
blockHandlerClass = ConsumerHandler.class,
blockHandler = "consumerHandler1")
public CommonResult consumerHandler(){
return new CommonResult(200,"解耦代码,兜底代码放到另一个类里面",new Payment(2021L,"serial002"));
}
下面是兜底处理类
public class ConsumerHandler {
//z注意,一定要在参数里面加上BlockException exception,不然不起效果,其实就是try catch 这个Exception
public static CommonResult consumerHandler1(BlockException exception){
return new CommonResult(4444,"解耦处理,consumerHandler======1");
}
public static CommonResult consumerHandler2(BlockException exception){
return new CommonResult(4444,"解耦处理,consumerHandler======2");
}
}
下面是sentinel的限流操作。
其中URL限流是@GetMapping中的value值。
而资源名是@SentinelResource中value值。
结果:只有资源名限流,自定义兜底方法才能起作用。
URL限流只会调用默认的方法