Java 我们可以多次发布流吗?
以下所有代码都不会打印任何内容。为什么?Java 我们可以多次发布流吗?,java,project-reactor,Java,Project Reactor,以下所有代码都不会打印任何内容。为什么? ConnectableFlux<Integer> publish = Flux.just(1) .publish(); ConnectableFlux<Integer> publish1 = Flux.just(2) .flatMap(x -> publish) .publish(); publish1.subscribe(System.out::println, Syst
ConnectableFlux<Integer> publish = Flux.just(1)
.publish();
ConnectableFlux<Integer> publish1 = Flux.just(2)
.flatMap(x -> publish)
.publish();
publish1.subscribe(System.out::println, System.out::println, System.out::println);
publish1.connect();
ConnectableFlux publish=Flux.just(1)
.publish();
ConnectableFlux publish1=流量。仅(2)
.flatMap(x->发布)
.publish();
publish1.subscribe(System.out::println,System.out::println,System.out::println);
publish1.connect();
ConnectableFlux publish1=Flux.just(2)
.publish()
.publish();
publish1.subscribe(System.out::println,System.out::println,System.out::println);
publish1.connect();
ConnectableFlux publish1=Flux.just(2)
.publish()
.doOnNext(System.out::println)
.publish();
publish1.subscribe(System.out::println,System.out::println,System.out::println);
publish1.connect();
不要忘记为每个可连接流量
在所有这些示例中,都缺少.connect
ion语句
对于第一种情况,要使其正常工作,我们还必须将
连接到第一个
发布可连接流量
:
ConnectableFlux<Integer> publish = Flux.just(1)
.publish();
ConnectableFlux<Integer> publish1 = Flux.just(2)
.flatMap(x -> publish)
.publish();
publish1.subscribe(System.out::println, System.out::println, System.out::println);
publish1.connect();
publish.connect();
在该示例中,我们使用了
.autoConnect()
运算符,在.autoConnect(0)
的情况下,它只是可连接流量#connect
的组合,并返回该值代码>语句。在.autoConnect(>0)
用于对初始源的延迟订阅,听起来像“当且仅当我们获得N订户时才连接到初始源”流在使用后被消耗。这就是connectableFlux
的工作方式。太棒了!谢谢阿吉安·奥勒:)
ConnectableFlux<Integer> publish1 = Flux.just(2)
.publish()
.doOnNext(System.out::println)
.publish();
publish1.subscribe(System.out::println, System.out::println, System.out::println);
publish1.connect();
ConnectableFlux<Integer> publish = Flux.just(1)
.publish();
ConnectableFlux<Integer> publish1 = Flux.just(2)
.flatMap(x -> publish)
.publish();
publish1.subscribe(System.out::println, System.out::println, System.out::println);
publish1.connect();
publish.connect();
ConnectableFlux<Integer> publish1 = Flux.just(2)
.publish()
.autoConnect() // or .autoConnect(0)
.doOnNext(System.out::println)
.publish();
publish1.subscribe(System.out::println, System.out::println, System.out::println);
publish1.connect();