写在前面
在初始状态下,使用Sentinel对接口做了一些熔断限流的配置。当触发熔断降级的时候,使用的是Sentinel默认的兜底方法。但是系统默认的并没有体现我们的业务要求。
所以Sentinel提供了blockHandler和fallback。
一句话:
fallback管理的是java运行异常。blockHandler管sentinel的控制台违规配置。
若blockHandler和fallback都进行了配置,则被限流降级而抛出BlockException时只会进入blockHandler处理逻辑。
客户端自定义限流处理逻辑步骤
- 创建:HanlderExpection类用于自定义限流处理逻辑
注意对应的函数必须为 static 函数,否则无法解析。
public class HanlderExpection {
public static String AllHandlerExpection(BlockException exception){
return "Client 全局HandlerExpection"+exception;
}
public static String HandlerExpectionA(BlockException exception){
return "Client 自定义HandlerExpection";
}
}
- 创建ClientFallBack类用于自定义fallback
注意对应的函数必须为 static 函数,否则无法解析。
public class ClientFallBack {
public static String allFallBack(){
return "Client 全局自定义fallback";
}
public static String fallBackA(){
return "Client 自定义fallback";
}
}
- controller设置@SentinelResource
@GetMapping("/serviceTestB")
@SentinelResource(value = "serviceTestB",
blockHandlerClass = HanlderExpection.class,
blockHandler = "AllHandlerExpection",
fallbackClass = ClientFallBack.class,
fallback = "allFallBack"
)
public String serviceTestB(){
return restTemplate.getForObject(serverUrl+"/serviceTestA",String.class);
}
网友评论