我正在使用适用于 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
线程正在执行处理。
有推荐的方法吗?我应该更喜欢在一个线程池中进行处理而不是在另一个线程池中进行处理吗?