Skip to content

Commit 5f57bdf

Browse files
authored
Merge pull request #315 from wafflestudio/develop
Release
2 parents 25689a5 + 4eb1cd0 commit 5f57bdf

File tree

1 file changed

+27
-3
lines changed

1 file changed

+27
-3
lines changed

core/src/main/kotlin/config/ApiWebClientConfig.kt

Lines changed: 27 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
package 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
36
import org.springframework.boot.context.properties.ConfigurationProperties
47
import org.springframework.boot.context.properties.EnableConfigurationProperties
58
import org.springframework.context.annotation.Bean
@@ -8,8 +11,11 @@ import org.springframework.context.annotation.Profile
811
import org.springframework.http.client.reactive.ReactorClientHttpConnector
912
import org.springframework.stereotype.Component
1013
import org.springframework.web.reactive.function.client.WebClient
14+
import reactor.netty.Connection
1115
import reactor.netty.http.client.HttpClient
16+
import reactor.netty.resources.ConnectionProvider
1217
import 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

3861
class ApiConfig {
39-
var responseTimeout: Long = 2000
62+
var readTimeout = 3000L
63+
var connectTimeout = 3000
4064
lateinit var baseUrl: String
4165
}
4266

0 commit comments

Comments
 (0)