更新时间:2025-01-09 GMT+08:00
分享

自定义降级

clientcontrol提供了自定义降级的功能。当目标业务代码报错时,如果用户想要执行自定义的降级逻辑可以参考以下配置。具体使用方式如下:

  1. pom文件添加依赖
  2. 配置文件,参考下面配置样例。

    devspore:
      client-control:
        caches:
          test:
            ttl: 60000  #此处配置的是缓存的有效时长
            performance-ttl: 30000  #此处配置的是一个性能缓存,时长一般低于ttl, 当缓存的时间小于性能缓存时,clientcontrol会直接把性能缓存作为方法返回值返回
            type: redis  此处配置的是 缓存类型, 支持 redis/caffine 指定具体缓存类型后,用户需要手动引入相关的依赖
            maximum-size: 60000
            redis-connection-factory-bean-name: redisConnectionFactory  # 当使用redis的时候,需要将redis的连接工厂的bean的名称配置在这里
        rules:
          fallbackTest: # 此处配置的是一个别名,用户可自定义,具体使用地方是在注解上
            time-limit:
              enable: false
            retry:
              enable: false
            fallback:
              # 默认开启
              enable: true
              # 慢调用时间(超过即为慢调用,单位s,默认60S)
              slow-call-duration-threshold: 30
              # 慢调用熔断比例(慢调用数量达到比例则熔断,默认100等于关闭状态)
              slow-call-rate-threshold: 100
              #失败百分比(触发断路器,默认50%)
              failure-rate-threshold: 50
              #滑动窗口类型(COUNT_BASED/TIME_BASED,数量/时间,默认时间)
              sliding-window-type: COUNT_BASED
              #滑动窗口大小(默认100,数量:次/时间:秒)
              sliding-window-size: 5
              #滑动窗口内最小请求数(默认100)   必须满足这个要求,才会触发断路器  不满足,不管失败率多少都不会触发
              minimum-number-of-calls: 5
              #进入半开所需时间(默认60s,单位ms)
              wait-duration-in-open-state: 10000
              #半开状态允许通过的请求数量,默认10个请求(失败比例达到设置的百分比,断路器继续打开,再次等待进入半开)注:不大于滑动窗口内最小请求数,相对较小的配置优先起作用,所以如果大于滑动窗口最小请求,起作用的就是滑动窗口最小请求数了
              permitted-number-of-calls-in-half-open-state: 5

  3. 目标方法上添加@ClientControl注解,fallback属性设置为自定义降级方法的名称。

    @ClientControl(fallback = "customFallback")
    public String testCustomDowngrade(Integer id) {
    	int i = 1 / id;
    	return new User(id, "test", 12).toString();
    }
    
    // 自定义降级方法需要和原方法返回值相同,参数列表在原方法的基础上多添加一个 Throwable throwable(固定写法),降级方法要和原方法在同一个类中。
    public String customFallback(Integer id, Throwable throwable) {
    	log.info("------------ 执行自定义降级方法 customFallback ---------------");
    	return "自定义降级";
    }

注意事项

  • 当只需要使用自定义降级方法的时候,无需关注配置。
  • 当结合clientcontrol的其他功能使用时,只需要在注解中添加fallback属性就可以了。
    @ClientControl(fallback = "customFallback")
    public String testCustomDowngrade(Integer id) {
    	int i = 1 / id;
    	return new User(id, "test", 12).toString();
    }

相关文档