如何创建仅在需要时才发出项目的发布者?

时间:2018-12-04 17:33:59

标签: project-reactor

我想将一个非反应式api与一个反应式Publisher桥接,该API在被请求时会生成一个项目。基本上,每当订户向该发布者请求项目时,该发布者都会生成该项目,但不会在此之前生成,因为操作成本很高。

1 个答案:

答案 0 :(得分:1)

如果昂贵的商品生成是同步且无状态的,请使用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;
});