From 82b3f256f00ebc5b1cea6cc6ee570deef7462f20 Mon Sep 17 00:00:00 2001 From: Amir Rajabi Date: Sun, 31 Aug 2025 12:30:40 +0330 Subject: [PATCH] Update WebClientConfig.kt --- .../nilin/opex/auth/config/WebClientConfig.kt | 20 ++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/auth-gateway/auth-gateway-app/src/main/kotlin/co/nilin/opex/auth/config/WebClientConfig.kt b/auth-gateway/auth-gateway-app/src/main/kotlin/co/nilin/opex/auth/config/WebClientConfig.kt index 88d8140e9..653fc8242 100644 --- a/auth-gateway/auth-gateway-app/src/main/kotlin/co/nilin/opex/auth/config/WebClientConfig.kt +++ b/auth-gateway/auth-gateway-app/src/main/kotlin/co/nilin/opex/auth/config/WebClientConfig.kt @@ -1,5 +1,6 @@ package co.nilin.opex.auth.config +import io.netty.channel.ChannelOption import org.springframework.beans.factory.annotation.Qualifier import org.springframework.cloud.client.loadbalancer.LoadBalanced import org.springframework.context.annotation.Bean @@ -9,13 +10,30 @@ import org.springframework.web.reactive.function.client.WebClient import org.zalando.logbook.Logbook import org.zalando.logbook.netty.LogbookClientHandler import reactor.netty.http.client.HttpClient +import reactor.netty.resources.ConnectionProvider +import java.time.Duration @Configuration class WebClientConfig { @Bean("keycloakWebClient") fun keycloakWebClient(keycloakConfig: KeycloakConfig, logbook: Logbook): WebClient { - val client = HttpClient.create().doOnConnected { it.addHandlerLast(LogbookClientHandler(logbook)) } + val provider = ConnectionProvider.builder("keycloakPool") + .maxConnections(100) + .maxIdleTime(Duration.ofSeconds(30)) + .maxLifeTime(Duration.ofMinutes(2)) + .pendingAcquireTimeout(Duration.ofSeconds(60)) + .evictInBackground(Duration.ofMinutes(1)) + .build() + + val client = HttpClient.create(provider) + .option(ChannelOption.CONNECT_TIMEOUT_MILLIS, 10000) + .responseTimeout(Duration.ofSeconds(10)) + .keepAlive(true) + .doOnConnected { it.addHandlerLast(LogbookClientHandler(logbook)) } + + client.warmup().block() + return WebClient.builder() .clientConnector(ReactorClientHttpConnector(client)) .baseUrl(keycloakConfig.url)