Как создать издателя, который будет выпускать элемент только по запросу? - PullRequest
0 голосов
/ 04 декабря 2018

Я хотел бы соединить нереактивный API, который генерирует элемент по запросу, с реактивным издателем.Обычно каждый раз, когда подписчик запрашивает и отправляет товар от указанного издателя, этот издатель будет генерировать товар, но не раньше, поскольку операция является дорогой.

1 Ответ

0 голосов
/ 10 декабря 2018

Если генерация дорогостоящего элемента является синхронной и без сохранения состояния, используйте generate(Consumer<SynchronousSink>):

Flux<UUID> uuidFlux = Flux.generate(sink -> sink.next(UUID.randomUUID());

Если она синхронная и с сохранением состояния, используйте соответствующие перегрузки:

Flux<String> customUuidFlux = Flux.generate(AtomicLong::new, (indexState, sink) -> {
    sink.next("item#" + indexState.getAndIncrement() + "-" + UUID.randomUUID());
    return indexState;
});
...