# 降级配置

# 概述

设置降级来规避后端服务不可用时导致返回一个404的不友好信息或者后端服务出现负载过重时来限制请求以防止后端服务奔溃

# 本内容你将获得

  • 断路器配置
  • 降级返回信息设置

# 断路器配置

断路器设置在CustomizeCircuitBreakerConfig类中,具体配置如下

@Configuration
public class CustomizeCircuitBreakerConfig {

    @Bean
    public ReactiveResilience4JCircuitBreakerFactory defaultCustomizer() {

        CircuitBreakerConfig circuitBreakerConfig = CircuitBreakerConfig.custom() 
                .slidingWindowType(CircuitBreakerConfig.SlidingWindowType.TIME_BASED) // 滑动窗口的类型为时间窗口
                .slidingWindowSize(60)// 时间窗口的大小为60秒
                .minimumNumberOfCalls(5) // 在单位时间窗口内最少需要5次调用才能开始进行统计计算
                .failureRateThreshold(20) // 在单位时间窗口内调用失败率达到20%后会启动断路器
                .automaticTransitionFromOpenToHalfOpenEnabled(true) // 允许断路器自动由打开状态转换为半开状态
                .permittedNumberOfCallsInHalfOpenState(5) // 在半开状态下允许进行正常调用的次数
                .waitDurationInOpenState(Duration.ofSeconds(60)) // 断路器打开状态转换为半开状态需要等待60秒
                .recordExceptions(Throwable.class) // 所有异常都当作失败来处理
                .build();

        // 30 没回应会自动返回失败
        ReactiveResilience4JCircuitBreakerFactory factory = new ReactiveResilience4JCircuitBreakerFactory();
        factory.configureDefault(id -> new Resilience4JConfigBuilder(id)
                .timeLimiterConfig(TimeLimiterConfig.custom().timeoutDuration(Duration.ofMillis(30000)).build())
                .circuitBreakerConfig(circuitBreakerConfig).build());

        return factory;
    }
}

# 降级返回信息设置

当触发熔断时,会调用fallback接口,在这可以设置返回数据

@RestController
public class FallbackController {

    @GetMapping("/fallback")
    public AjaxResult fallback() {
        return AjaxResult.success("服务忙碌,请稍等");
    }
}