[Sentinel 四]自定义资源熔断降级

913 阅读1分钟

自定义资源点

@SentinelResource 注解主要参数:
value: 资源名称
blockHandler: 处理blockException的函数

1.实现熔断的异常处理

@SentinelResource(value = "userService_getUser", blockHandler = "getUserExceptionHandler")
public User getUser(String userId) {
    User user = new User();
    user.setUserId(userId);
    user.setName(userName);
    user.setMobile("11122223333");
    return user;
}
/** 处理BlockException的函数,需public,返回类型需与原方法相匹配 */
public User getUserExceptionHandler(String userId, BlockException e) {
    log.error( "blockHandler:" + userId, e);
    return null;
}

调用后,sentinel控制台簇点链路出现资源点,点击流控,QPS改为1

快速调用后,调用返回null,日志打印如下

2. 实现熔断降级

点击 降级

当异常率超过50%时,后续2秒内的调用直接触发熔断降级,默认情况下会直接抛出DegraderException

3. 熔断后的降级处理

@SentinelResource(value = "userService_getUser2", fallback = "getUser2ExceptionHandler")
public void getUser2(String userId) {
    log.info(userId);
    throw new RuntimeException();
}

public void getUser2ExceptionHandler(String userId) {
    log.error( "fallback:" + userId);
}

满足熔断降级条件后,会执行fallback方法

注意

blockHandler和fallback都进行了配置,则被限流降级抛出BlockException异常,只会进入blockHandler处理;若未配置 blockHandler、fallback 和 defaultFallback,则被限流降级时会将 BlockException 直接抛出。