0
点赞
收藏
分享

微信扫一扫

流控组件Sentinel核心注解@SentinelResource中的参数fallback和blockHandler的使用方式


fallback顾名思义当Java程序运行发生错误时,由该参数定义的方法进行处理

@GetMapping(value = "/consumer/{id}")
@SentinelResource(value = "consumer", fallback = "handlerFallback")
public ResponseEntity<String> consumerData(@PathVariable("id")Integer id) {
ResponseEntity<String> entity = remoteService.getData(id);
if (id <= 0) {
throw new IllegalArgumentException("非法参数异常!");
} else if (entity.getData() == null) {
throw new NullPointerException("无响应数据,空指针异常!");
}
return entity;
}

public ResponseEntity<String> handlerFallback(Integer id, Throwable e) {
return new ResponseEntity<>(443, "程序处理异常,开始执行fallback数据-->" +e.getMessage());
}

流控组件Sentinel核心注解@SentinelResource中的参数fallback和blockHandler的使用方式_限流

blockHandler这个也很好明白,也就是当API违背控制台设置的阈值时,执行该参数定义的方法进行处理;说白了就是限流之后的处理

@GetMapping(value = "/consumer/{id}")
@SentinelResource(value = "consumer",blockHandler = "blockHandler")
public ResponseEntity<String> consumerData(@PathVariable("id")Integer id) {
ResponseEntity<String> entity = remoteService.getData(id);
if (id <= 0) {
throw new IllegalArgumentException("非法参数异常!");
} else if (entity.getData() == null) {
throw new NullPointerException("无响应数据,空指针异常!");
}
return entity;
}

public ResponseEntity<String> blockHandler(BlockException blockException) {
return new ResponseEntity<>(444, "QPS过高,服务开始熔断降级--->"+blockException.getMessage());
}

流控组件Sentinel核心注解@SentinelResource中的参数fallback和blockHandler的使用方式_sentinel_02

那么问题来了,如果同时发生Java运行错误和限流,那么会走哪个默认的方法呢?

@GetMapping(value = "/consumer/{id}")
@SentinelResource(value = "consumer", fallback = "handlerFallback", blockHandler = "blockHandler")
public ResponseEntity<String> consumerData(@PathVariable("id")Integer id) {
ResponseEntity<String> entity = remoteService.getData(id);
if (id <= 0) {
throw new IllegalArgumentException("非法参数异常!");
} else if (entity.getData() == null) {
throw new NullPointerException("无响应数据,空指针异常!");
}
return entity;
}

public ResponseEntity<String> handlerFallback(Integer id, Throwable e) {
return new ResponseEntity<>(443, "程序处理异常,开始执行fallback数据-->" +e.getMessage());
}
public ResponseEntity<String> blockHandler(Integer id, BlockException blockException) {
return new ResponseEntity<>(444, "QPS过高,服务开始熔断降级--->"+blockException.getMessage());
}

设置限流规则

流控组件Sentinel核心注解@SentinelResource中的参数fallback和blockHandler的使用方式_sentinel_03

当我持续刷新,它走的是blockHandler路线

流控组件Sentinel核心注解@SentinelResource中的参数fallback和blockHandler的使用方式_限流_04


记得在配置文件加入以下

feign:
sentinel:
enabled: true


举报

相关推荐

0 条评论