【问题标题】:How to create a Mono from a completableFuture如何从 completableFuture 创建 Mono
【发布时间】: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


    【解决方案1】:

    //.thenApply will wait for your future to complete first and then return Mono<T> Mono.fromFuture(yourCompletableFuture.thenApply(x -> x.doSomething);

    【讨论】:

      猜你喜欢
      • 2019-07-18
      • 1970-01-01
      • 1970-01-01
      • 2022-10-24
      • 1970-01-01
      • 2020-11-19
      • 1970-01-01
      • 1970-01-01
      • 2019-11-20
      相关资源
      最近更新 更多