Reputation: 527
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:
https://docs.spring.io/spring-cloud-circuitbreaker/docs/current/reference/html/
https://resilience4j.readme.io/docs/getting-started-3#configuration
https://resilience4j.readme.io/docs/getting-started-4
Upvotes: 0
Views: 23