AsyncHttpClient创建多少线程?

时间:2019-05-28 13:37:04

标签: multithreading kotlin completable-future asynchttpclient

我在代码中使用异步http客户端来异步处理GET响应 我可以同时运行100个请求。

我只在容器中的httpClient实例上使用

@Bean(destroyMethod = "close")
open fun httpClient() = Dsl.asyncHttpClient()

代码看起来像

fun method(): CompletableFuture<String> {
    return httpClient.prepareGet("someUrl").execute()
        .toCompletableFuture()
        .thenApply(::getResponseBody)
}

功能正常。在我的测试中,我使用具有相同网址的模拟端点。但是我的期望是所有请求都在多个线程中处理,但是在事件探查器中,我看到为AsyncHttpClient创建了16个线程,即使没有发送请求,它们也不会被破坏。

profiler screenshoot

我的期望是

  • 异步客户端的线程数会减少
  • 线程将在某些配置的超时后被销毁
  • 是否有一些选项可以控制asyncHttpClient可以创建多少个线程?

我在期望中错过了什么吗?

更新1 我在https://github.com/AsyncHttpClient/async-http-client/wiki/Connection-pooling上看到了说明 我在线程池上找不到任何信息

更新2 我还创建了执行此操作的方法,但是使用了处理程序和其他执行程序池

实用方法看起来像

fun <Value, Result> CompletableFuture<Value>.handleResultAsync(executor: Executor, initResultHandler: ResultHandler<Value, Result>.() -> Unit): CompletableFuture<Result> {
    val rh = ResultHandler<Value, Result>()
    rh.initResultHandler()

    val handler = BiFunction { value: Value?, exception: Throwable? ->
        if (exception == null) rh.success?.invoke(value) else rh.fail?.invoke(exception)
    }

    return handleAsync(handler, executor)
}

更新后的方法如下

fun method(): CompletableFuture<String> {
    return httpClient.prepareGet("someUrl").execute()
        .toCompletableFuture()
        .handleResultAsync(executor) {
            success = {response ->
                logger.info("ok")
                getResponseBody(response!!)
            }
            fail = { ex ->
                logger.error("Failed to execute request", ex)
                throw ex
            }
    }
}

然后我可以看到GET方法的结果是在线程池提供的线程中执行的(以前,结果是在“ AsyncHttpClient-3-x”中执行的),但仍创建了AsyncHttpClient的其他线程并且未将其销毁。

1 个答案:

答案 0 :(得分:1)

AHC有两种类型的线程:

  1. 用于I / O操作。 在您的屏幕上,它是AsyncHttpClient-x-x 线程。 AHC创建其中的 2 * core_number
  2. 超时。 在您的屏幕上,它是AsyncHttpClient-timer-1-1线程。应该 仅一个

来源:在GitHub上发布的问题:https://github.com/AsyncHttpClient/async-http-client/issues/1658