AWS开发工具包-异步配置SdkAdvancedAsyncClientOption.FUTURE_COMPLETION_EXECUTOR

时间:2019-07-13 13:17:10

标签: java amazon-web-services aws-sdk aws-sdk-java-2.0

asyncConfiguration SdkAdvancedAsyncClientOption.FUTURE_COMPLETION_EXECUTOR的用途是什么? 在什么情况下我们应该使用它?

FUTURE_COMPLETION_EXECUTOR上的java doc

中,我看到:Configure the executor that should be used to complete the CompletableFuture that is returned by the service clients.我认为后续对CompletableFuture的异步结果调用将在传入的FUTURE_COMPLETION_EXECUTOR的执行程序上执行,但这是不是。

ClientAsyncConfiguration.Builder asyncConfig = ClientAsyncConfiguration.builder()
        .advancedOption(SdkAdvancedAsyncClientOption.FUTURE_COMPLETION_EXECUTOR, customExecutor);

SnsAsyncClient.builder()
        .asyncConfiguration(asyncConfig.build())
        .build();

异步请求示例:

snsAsyncClient.publish(publishRequest).thenApplyAsync(..);

1 个答案:

答案 0 :(得分:0)

AWS SDK异步请求返回CompletableFuture。默认情况下,将在诸如thenApply(..)之类的线程上执行对返回的whenComplete(..)实例的CompletableFuturesdk-async-response-0-X的调用。 异步配置SdkAdvancedAsyncClientOption.FUTURE_COMPLETION_EXECUTOR的想法是提供线程池执行程序,该执行程序将用于CompletableFuture上的后续调用,例如thenApply(..)whenComplete(..)。由于执行了thenApplyAsync,因此该执行程序将不会应用于whenCompleteAsyncCompletableFuture之类的方法(如果该执行程序未传递到thenApplyAsync(..)中,则默认情况下将使用它{{1} },或者我们可以将自定义执行程序作为第二个方法参数传递。

ForkJoinPool.commonPool()
snsAsyncClient.publish(publishRequest) .thenApply(..) .whenComplete(..); thenApply中的

代码将在whenComplete中配置的执行程序上进行处理。