Spring Cloud Gateway - how to apply timeout limiter to specific endpoint, using Kotlin - Stack Overflow

How do I apply a timeout limiter in Spring to a specific endpoint?E.g. I have, but I am stuck on step

How do I apply a timeout limiter in Spring to a specific endpoint?

E.g. I have, but I am stuck on step 3:

RouteLocator

@Configuration
internal class RoutingConfig(
    private val serverProperties: ServerProperties,
    private val ignoreFilter: IgnoreFilterConfig,
) {

    private val logger = LoggerFactory.getLogger(RoutingConfig::class.java)

    @Bean
    fun routeLocator(
        builder: RouteLocatorBuilder,
        tokenRelayGatewayFilterFactory: TokenRelayGatewayFilterFactory,
        requestRateLimiterConfig: RequestRateLimiterConfig,
        timeLimiterRegistry: TimeLimiterRegistry,
    ): RouteLocator {
        return builder.routes()

            // routing for Resource Server
            .route("resource-server") { r ->
                r.path("${serverProperties.resourceServerPrefix}/**")
                    .filters { f ->

                        // 1. Token relay filter first for authentication
                        f.filter(tokenRelayGatewayFilterFactory.apply())

                        // 2. Request rate limiter
                        f.filter(requestRateLimiterConfig.apply(RequestRateLimiterConfig.Config()))

                        // 3. Time limiter
                        val timeLimiter = timeLimiterRegistry.timeLimiter("resourceServerTimeLimiter")
                        }

And then here is my actual timeout configuration class

Timeout Limiter Class

@Configuration
internal class TimeLimiterConfig(
    private val timeOutLimiterProperties: TimeOutLimiterProperties
) {

    // default configuraiton
    @Bean
    fun customTimeLimiterConfig(): TimeLimiterConfig {
        return TimeLimiterConfig.custom()
            .timeoutDuration(timeOutLimiterProperties.timeOutDuration)
            .cancelRunningFuture(timeOutLimiterProperties.cancelRunningFuture)
            .build()
    }

    @Bean
    fun customTimeLimiterRegistry(
        customTimeLimiterConfig: TimeLimiterConfig
    ): TimeLimiterRegistry {
        return TimeLimiterRegistry.of(customTimeLimiterConfig)
    }

    @Bean
    fun resourceServerTimeLimiter(
        timeLimiterRegistry: TimeLimiterRegistry,
        customTimeLimiterConfig: TimeLimiterConfig
    ): TimeLimiter {
        return timeLimiterRegistry.timeLimiter(
            "resourceServerTimeLimiter",
            customTimeLimiterConfig
        )
    }
}

The most I could find in terms of guidance were:

/

发布者:admin,转转请注明出处:http://www.yc00.com/questions/1745600290a4635361.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信