Spring Cloud Gateway中配置路由和circuitBreaker

自定义circuitBreaker

@Configuration
public class CustomizeCircuitBreakerConfig {

    @Bean
    public Customizer<ReactiveResilience4JCircuitBreakerFactory> defaultCustomizer() {
        return factory -> {
            CircuitBreakerConfig defaultCircuitBreakerConfig = CircuitBreakerConfig.custom()
                .slidingWindowType(CircuitBreakerConfig.SlidingWindowType.TIME_BASED)
                .slidingWindowSize(300)
                .minimumNumberOfCalls(30)
                .slowCallDurationThreshold(Duration.ofSeconds(3))
                .failureRateThreshold(70)
                .slowCallRateThreshold(70)
                .enableAutomaticTransitionFromOpenToHalfOpen()
                .permittedNumberOfCallsInHalfOpenState(20)
                .waitDurationInOpenState(Duration.ofSeconds(60))
                .recordExceptions(Throwable.class)
                .build();

			// 默认熔断器配置
            factory.configureDefault(id -> new Resilience4JConfigBuilder(id)
                .timeLimiterConfig(TimeLimiterConfig.custom().timeoutDuration(Duration.ofSeconds(10)).build())
                .circuitBreakerConfig(defaultCircuitBreakerConfig)
                .build());

			// 自定义熔断器配置
            factory.configure(builder -> builder
                .timeLimiterConfig(TimeLimiterConfig.custom().timeoutDuration(Duration.ofSeconds(20)).build())
                .circuitBreakerConfig(defaultCircuitBreakerConfig)
                .build(), MicroservicesEnum.OPEN_FOREIGN.getCircuitBreakerName());

//param1:自动定义熔断器名,使用的配置名           factory.create(MicroservicesEnum.OPENX_FOREIGN.getCircuitBreakerName(), MicroservicesEnum.OPEN_FOREIGN.getCircuitBreakerName());
        };
    }
}

路由配置

 @Bean
    public RouteLocator routeLocator(RouteLocatorBuilder builder) {
        return builder.routes()
            .route(MicroservicesEnum.OPENX_FOREIGN.getServiceName(), r -> r.path(MicroservicesEnum.OPENX_FOREIGN.getRoutePath() + "**")
                .filters(
                    f -> f.stripPrefix(1)
                        .filter(openxServiceAuthFilter)
                        .filter(new PreserveHostHeaderGatewayFilterFactory().apply())
                        .circuitBreaker(c -> c.setName(MicroservicesEnum.OPENX_FOREIGN.getCircuitBreakerName()).setFallbackUri("forward:/error/fallback")))
                .uri("lb://" + MicroservicesEnum.OPENX_FOREIGN.getServiceName()))
            .route("not-found", r -> r.path("/**").uri("forward:/error/notfound"))
            .build();
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值