Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java asyncHttpClient为每个连接创建新线程_Java_Asynchttpclient - Fatal编程技术网

Java asyncHttpClient为每个连接创建新线程

Java asyncHttpClient为每个连接创建新线程,java,asynchttpclient,Java,Asynchttpclient,我在用java做库,库是用来调用外部服务API的。 为此,我正在使用 代码的某些部分: public CompletableFuture<Optional<TokensResponse>> clientCredentialsGrant(String clientId, String clientSecret, String deviceId, Optional<String> scope) { AsyncHttpClient asyncHtt

我在用java做库,库是用来调用外部服务API的。 为此,我正在使用

代码的某些部分:

 public CompletableFuture<Optional<TokensResponse>> clientCredentialsGrant(String clientId, String clientSecret, String deviceId, Optional<String> scope) {
        AsyncHttpClient asyncHttpClient = asyncHttpClient();
        BoundRequestBuilder requestBuilder = asyncHttpClient
                .preparePost(host + "/oauth2/token")
                .addFormParam("grant_type", "client_credentials")
                .addFormParam("device_id", deviceId)
                .addFormParam("client_id", clientId)
                .addFormParam("client_secret", clientSecret);

        if (scope.isPresent()) {
            requestBuilder.addFormParam("scope", scope.get());
        }

        return runRequestWithTokenResponse(requestBuilder, asyncHttpClient);
    }
我可以定义一些要使用的线程池吗

通常,如果您创建了新客户,AHC通常会表现不佳 对于每个请求,因为它将创建新线程和连接池 每人


这就是我在初始化对象AsyncHttpClient时实际执行的操作。

可以这样做,连接池行为可以通过AsyncHttpClientConfig配置:

AsyncHttpClient http = asyncHttpClient(config()
    .setMaxConnections(500)
    .setMaxConnectionsPerHost(200)
    .setPooledConnectionIdleTimeout(100)
    .setConnectionTtl(500)
);

初始化对象AsyncHttpClient时

可以这样做,连接池行为可以通过AsyncHttpClientConfig配置:

AsyncHttpClient http = asyncHttpClient(config()
    .setMaxConnections(500)
    .setMaxConnectionsPerHost(200)
    .setPooledConnectionIdleTimeout(100)
    .setConnectionTtl(500)
);

您不需要定义线程池。AHC负责并发执行。 只需创建一个AHC实例并在任何地方使用它。 例如,将其设为类字段:

asynchtpclient-asynchtpclient=asynchtpclient()

发动机罩下AHC有两种类型的螺纹:

  • 用于I/O操作。 在屏幕上,它是AsyncHttpClient-x-x 线程。AHC创建了其中的2个核心编号
  • 暂停。 在屏幕上,它是AsyncHttpClient-timer-1-1线程。应该是 只有一个

  • 任何不同的数字都表示您正在创建多个客户端。在您的情况下,它是多余的。

    您不需要定义线程池。AHC负责并发执行。 只需创建一个AHC实例并在任何地方使用它。 例如,将其设为类字段:

    asynchtpclient-asynchtpclient=asynchtpclient()

    发动机罩下AHC有两种类型的螺纹:

  • 用于I/O操作。 在屏幕上,它是AsyncHttpClient-x-x 线程。AHC创建了其中的2个核心编号
  • 暂停。 在屏幕上,它是AsyncHttpClient-timer-1-1线程。应该是 只有一个

  • 任何不同的数字都表示您正在创建多个客户端。在您的情况下,它是多余的。

    我可以简单地只使用一个httpclient吗?虽然它将被许多并发调用使用?@Baku是的,你可以这样做。还有一个问题,如果在应用程序一直运行而不关闭它的情况下,它将不会成为问题?这就是池所做的,在需要时保持一些连接以重新使用。因此,您不会每次都打开一个新连接。您需要检查哪个更适合tou应用程序。我可以简单地只使用一个httpclient吗?虽然它将被许多并发调用使用?@Baku是的,你可以这样做。还有一个问题,如果在应用程序一直运行而不关闭它的情况下,它将不会成为问题?这就是池所做的,在需要时保持一些连接以重新使用。因此,您不会每次都打开一个新连接。您需要检查哪个更适合tou应用程序。