Project Reactor вызов кода с блокировками из реактивного

Сейчас только начала осваивать Project Reactor. На сайте проекта есть возможность пройти небольшой онлайн курс. Последние задания в нем связаны с тем, как подружить асинхрон с синхроном. Я задания выполнила, но не уверена, что правильно разобралась в происходящем. Задания

  1. Create a Flux for reading all users from the blocking repository deferred until the flux is subscribed, and run it with a bounded elastic scheduler

Мое решение:

    Flux<User> blockingRepositoryToFlux(BlockingRepository<User> repository) {
        return Flux.defer(()->Flux.fromIterable(repository.findAll())).subscribeOn(Schedulers.boundedElastic());
    }

Метод findAll выглядит как Iterable<T> findAll()

Если я правильно поняла, мы получаем список из репозитория и создаем из него Flux и лениво ждем, когда кто-то подключится. Для чего тут будет использоваться отдельный пул потоков? Что будет в нем обрабатываться?

  1. Insert users contained in the Flux parameter in the blocking repository using a bounded elastic scheduler and return a Mono<Void> that signal the end of the operation

Мое решение:

    Mono<Void> fluxToBlockingRepository(Flux<User> flux, BlockingRepository<User> repository) {
        return flux.publishOn(Schedulers.boundedElastic()).doOnNext(repository::save).then();
    }

Тут я предполагаю так: у нас есть пользователи и для их сохранения мы используем отдельный пул. Но мне не очень понятно, зачем мы используем then и как это позволит получить информацию об успешном или неуспешном сохранении (You can make it more explicit that you're only interested in knowing if the save succeeded or failed by chaining the then() operator at the end, which returns a Mono<Void>)


Ответы (0 шт):