Project Reactor将发布者一分为二,最少有两个订阅者

时间:2019-10-12 06:56:38

标签: java project-reactor reactor

如何在Reactor中将发布者一分为二,以便存在两个相同的数据流,以便在下游以不同的流进行处理?

因此,我可以映射每个流并分别订阅每个流。

我在API中看不到任何表明它在API上的信息。

我需要等到两个订阅者都准备就绪后再发布。

1 个答案:

答案 0 :(得分:1)

感谢您的投入并没有直截了当,当然只有多个订阅者:

  val flux = Flux.just("MyData1", "MyData2", "MyData3");

  flux.doOnNext { println("Subscribing one$it") }.subscribe()

  flux.doOnNext { println("Subscribing Two$it") }.subscribe()

将输出:

Subscribing oneMyData1
Subscribing oneMyData2
Subscribing oneMyData3
Subscribing TwoMyData1
Subscribing TwoMyData2
Subscribing TwoMyData3

如上所述,这里有Share,但是此API不允许设置最小数量的订阅者,因此最好调用下面的函数,因此在我的情况下,我想等到我们有两个订阅者。文档指出

  

首次订阅时导致源Flux订阅一次的Flux,因此后期订阅者可能会错过项目。

val flux = Flux.just("MyData1", "MyData2", "MyData3").publish().refCount(2)

这将导致以下输出,以确保在启动第二个订户时出现延迟时不会丢失消息。

Subscribing oneMyData1
Subscribing TwoMyData1
Subscribing oneMyData2
Subscribing TwoMyData2
Subscribing oneMyData3
Subscribing TwoMyData3