sim*_*mon 1 project-reactor aws-sdk aws-lambda completable-future
我试图包装CompletableFuture在 ReactorMono类型中以简化我的转换操作。Project Reactor 总体来说更方便!我在 AWS Lambda 函数中工作,我正在使用新的 AWS Java SDK 2.x 版本调用 AWS 服务,例如 S3、SQS 等。这个新的开发工具包允许对 AWS 服务进行异步调用并返回 CompleteableFuture 对象。
例如:
S3AsyncClient s3AsyncClient = S3AsyncClient.builder().build();
Mono.fromFuture(s3AsyncClient.getObject(b ->
b.bucket(bucketId).key(objectKey), AsyncResponseTransformer.toBytes()).subscribe()
System.out.println("stuff");
Run Code Online (Sandbox Code Playgroud)
问题是,当我的主代码调用 时CompletableFuture (s3AsyncClient.getObject),执行线程突然切换到 CompleteableFuture 线程并且我调用 Mono 的主方法在 CompletableFuture 完成之前返回。
基本上,从上面的例子来看,"stuff"字符串在s3AsyncClient.getObject完成之前被打印出来。
如何确保 Mono 和CompletableFuture在同一线程中执行,或者如何确保我的 lambda 在CompletableFuture完成之前不会终止?
对于那些想知道的人,只有在我将代码远程部署到 AWS Lambda 时才会出现这种行为。我在本地没有遇到这种行为......
小智 6
//.thenApply will wait for your future to complete first and then return Mono<T>
Mono.fromFuture(yourCompletableFuture.thenApply(x -> x.doSomething);
| 归档时间: |
|
| 查看次数: |
5410 次 |
| 最近记录: |