首页 > 解决方案 > 如何创建仅在请求时才发出项目的发布者?

问题描述

我想将一个非反应式 api 与反应式发布者联系起来,该 API 在请求时生成一个项目。基本上,每当订阅者向所述发布者请求和项目时,该发布者将生成项目,但不是之前,因为操作很昂贵。

标签: project-reactor

解决方案


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

推荐阅读