gotoOla
09/22/2020, 9:08 AMsuspend fun main() {
val server = embeddedServer(Netty, port = 8099) {
routing {
route("/") {
getAndReportMetrics("/test") {
println("received a request")
delay(5000)
it.respondText { "test" }
}
}
}
addCallMetrics()
}.start()
val client = createHttpClient()
(1..7).map {
println("Sending $it request")
GlobalScope.async {
client.get<HttpResponse>("<http://localhost:8099/test>")
}
}.awaitAll()
}
fun createHttpClient(
socketTimeoutMs: Long = 30_000,
connectionTimeoutMs: Long = 30_000,
connectionRequestTimeoutMs: Long = 30_000
): HttpClient {
return HttpClient(OkHttp) {
install(HttpTimeout) {
connectTimeoutMillis = connectionTimeoutMs
requestTimeoutMillis = connectionRequestTimeoutMs
socketTimeoutMillis = socketTimeoutMs
}
engine {
config {
// <https://github.com/ktorio/ktor/issues/1708>
retryOnConnectionFailure(true)
}
}
expectSuccess = false
}
}
gotoOla
09/22/2020, 9:08 AMgotoOla
09/22/2020, 9:15 AMgildor
09/22/2020, 9:16 AMgildor
09/22/2020, 9:17 AMgotoOla
09/22/2020, 9:17 AMfun createHttpClient(
socketTimeoutMs: Long = 30_000,
connectionTimeoutMs: Long = 30_000,
connectionRequestTimeoutMs: Long = 30_000
): HttpClient {
val dispatcher = Dispatcher()
dispatcher.maxRequests = 100
dispatcher.maxRequestsPerHost = 10
val client = OkHttpClient.Builder()
.dispatcher(dispatcher)
.build()
return HttpClient(OkHttp) {
install(HttpTimeout) {
connectTimeoutMillis = connectionTimeoutMs
requestTimeoutMillis = connectionRequestTimeoutMs
socketTimeoutMillis = socketTimeoutMs
}
engine {
config {
// <https://github.com/ktorio/ktor/issues/1708>
retryOnConnectionFailure(true)
preconfigured = client
}
}
expectSuccess = false
}
}