Я пытаюсь обернуть CompletableFuture
внутри типа Reactor Mono
, чтобы упростить мои операции преобразования. Project Reactor в целом удобнее! Я работаю внутри лямбда-функции AWS и вызываю сервисы AWS, такие как S3, SQS и т. Д., Используя новую версию AWS Java SDK 2.x. Этот новый 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
выполняются в одном и том же потоке, или как убедиться, что моя лямбда не завершает работу до того, как CompletableFuture
завершится?
Для тех, кто интересуется, такое поведение возникает только при удаленном развертывании кода на AWS Lambda. Я не испытываю такого поведения локально ...