最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

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

programmeradmin3浏览0评论

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:

/

与本文相关的文章

发布评论

评论列表(0)

  1. 暂无评论