【发布时间】:2019-06-06 21:00:01
【问题描述】:
我正在尝试将 CompletableFuture 包装在 Reactor Mono 类型中,以简化我的转换操作。 Project Reactor总体上更方便!我在 AWS Lambda 函数中工作,并且正在使用新的 AWS Java SDK 2.x 版本调用 AWS 服务,例如 S3、SQS 等。这个新的 SDK 允许对 AWS 服务进行异步调用并返回 CompleteableFuture 对象。
例如:
S3AsyncClient s3AsyncClient = S3AsyncClient.builder().build();
Mono.fromFuture(s3AsyncClient.getObject(b ->
b.bucket(bucketId).key(objectKey), AsyncResponseTransformer.toBytes()).subscribe()
System.out.println("stuff");
问题是,当我的主代码调用 CompletableFuture (s3AsyncClient.getObject) 时,突然执行线程切换到 CompleteableFuture 线程,而我调用 Mono 的主方法在 CompletableFuture 完成之前返回。
基本上,从上面的示例中,"stuff" 字符串在 s3AsyncClient.getObject 完成之前打印。
如何确保 Mono 和 CompletableFuture 在同一个线程中执行,或者如何确保我的 lambda 在 CompletableFuture 完成之前不会终止?
对于那些想知道的人,我只有在将代码远程部署到 AWS Lambda 时才会出现这种行为。我在本地没有遇到这种行为...
【问题讨论】:
标签: aws-lambda aws-sdk project-reactor completable-future