【发布时间】:2019-07-12 19:57:03
【问题描述】:
我想为 AWS SDK 2.x 的异步客户端(例如SnsAsyncClient)设置自定义线程池执行器。我看到对于 AWS SDK 1.x,客户端构建器上存在 withExecutorFactory,而对于 2.x,我们需要在客户端构建器上设置 ClientAsyncConfiguration 并调用 asyncConfiguration 方法:
ClientAsyncConfiguration.Builder asyncConfig = ClientAsyncConfiguration.builder()
.advancedOptions(Map.of(SdkAdvancedAsyncClientOption.FUTURE_COMPLETION_EXECUTOR,
myCustomExecutor));
SnsAsyncClient.builder()
.asyncConfiguration(asyncConfig.build())
.build();
不过,自定义线程池执行器不适用。我希望CompletableFuture 上的所有异步调用和后续调用都将在自定义执行器上执行,但事实并非如此。
在调试期间,我看到逻辑在不同的线程池上执行:aws-java-sdk-NettyEventLoop-0-X、ForkJoinPool.commonPool-worker-X。
AWS SNS 异步调用示例:
snsAsyncClient.publish(publishRequest)
.thenApplyAsync(..)
.whenCompleteAsync(..);
如何设置自定义线程池,让异步非阻塞IO操作在特定线程池上执行?
AWS 开发工具包版本:software.amazon.awssdk sdk-core 2.7.3
【问题讨论】:
标签: java amazon-web-services asynchronous aws-sdk completable-future