【发布时间】:2020-06-19 14:08:04
【问题描述】:
我正在使用适用于 Java 2.0 的 AWS 开发工具包以及 Netty HTTP 客户端,我注意到有两个不同的线程池可以有效地处理响应。第一个是 ThreadPoolExecutor,可以像这样作为服务客户端本身的一部分被覆盖
DynamoDbAsyncClient dynamoClient = DynamoDbAsyncClient.builder()
.httpClient(httpClient)
.asyncConfiguration(ClientAsyncConfiguration.builder()
.advancedOption(SdkAdvancedAsyncClientOption.FUTURE_COMPLETION_EXECUTOR, awsSdkFutureCompletionExecutor)
.build())
第二个是 Netty HTTP 客户端的事件循环。根据我加入线程的位置,我可以看到它由aws-java-sdk-NettyEventLoop 或sdk-async-response 线程池处理。
如果我调用dynamoClient.query(request).join(),我可以看到aws-java-sdk-NettyEventLoop 继续任何进一步的处理,而dynamoClient.query(request).whenComplete(...) 意味着sdk-async-response 线程正在执行处理。
有推荐的方法吗?我应该更喜欢在一个线程池中进行处理而不是在另一个线程池中进行处理吗?
【问题讨论】:
标签: java multithreading asynchronous aws-java-sdk-2.x