11package com.wafflestudio.snu4t.config
22
3+ import io.netty.channel.ChannelOption
4+ import io.netty.handler.timeout.ReadTimeoutHandler
5+ import io.netty.handler.timeout.WriteTimeoutHandler
36import org.springframework.boot.context.properties.ConfigurationProperties
47import org.springframework.boot.context.properties.EnableConfigurationProperties
58import org.springframework.context.annotation.Bean
@@ -8,8 +11,11 @@ import org.springframework.context.annotation.Profile
811import org.springframework.http.client.reactive.ReactorClientHttpConnector
912import org.springframework.stereotype.Component
1013import org.springframework.web.reactive.function.client.WebClient
14+ import reactor.netty.Connection
1115import reactor.netty.http.client.HttpClient
16+ import reactor.netty.resources.ConnectionProvider
1217import java.time.Duration
18+ import java.util.concurrent.TimeUnit
1319
1420@Configuration
1521@EnableConfigurationProperties(ApiConfigs ::class )
@@ -23,8 +29,25 @@ class ApiWebClientConfig(
2329 }
2430
2531 private fun create (apiConfig : ApiConfig ): WebClient {
26- val httpClient = HttpClient .create().responseTimeout(Duration .ofMillis(apiConfig.responseTimeout))
27- val connector = ReactorClientHttpConnector (httpClient)
32+ val connector =
33+ ReactorClientHttpConnector (
34+ HttpClient .create(
35+ ConnectionProvider .builder(" snuttev-provider" )
36+ .maxConnections(100 )
37+ .pendingAcquireTimeout(Duration .ofMillis(300 ))
38+ .maxLifeTime(Duration .ofSeconds(3600 ))
39+ .maxIdleTime(Duration .ofSeconds(240 ))
40+ .lifo()
41+ .build(),
42+ )
43+ .option(ChannelOption .CONNECT_TIMEOUT_MILLIS , apiConfig.connectTimeout)
44+ .doOnConnected { conn: Connection ->
45+ conn
46+ .addHandlerLast(ReadTimeoutHandler (apiConfig.readTimeout, TimeUnit .MILLISECONDS ))
47+ .addHandlerLast(WriteTimeoutHandler (apiConfig.readTimeout, TimeUnit .MILLISECONDS ))
48+ },
49+ )
50+
2851 return WebClient .builder().clientConnector(connector).baseUrl(apiConfig.baseUrl).build()
2952 }
3053}
@@ -36,7 +59,8 @@ class ApiConfigs {
3659}
3760
3861class ApiConfig {
39- var responseTimeout: Long = 2000
62+ var readTimeout = 3000L
63+ var connectTimeout = 3000
4064 lateinit var baseUrl: String
4165}
4266
0 commit comments