gpt4 book ai didi

reactive-programming - 如何在 Project Reactor 3 中将冷流转换为热流?

转载 作者:行者123 更新时间:2023-12-05 00:13:51 25 4
gpt4 key购买 nike

根据 Mono 和 Flux 的定义,它们都代表一个异步数据序列,在订阅之前什么也不会发生。

并且有两大类出版商:热出版商和冷出版商。
Mono 和 Flux 为每个订阅重新生成数据。如果未创建订阅,则永远不会生成数据。

另一方面,热门发布者不依赖于任何数量的订阅者。

这是我的冷流代码:

        System.out.println("*********Calling coldStream************");
Flux<String> source = Flux.fromIterable(Arrays.asList("ram", "sam", "dam", "lam"))
.doOnNext(System.out::println)
.filter(s -> s.startsWith("l"))
.map(String::toUpperCase);

source.subscribe(d -> System.out.println("Subscriber 1: "+d));
source.subscribe(d -> System.out.println("Subscriber 2: "+d));
System.out.println("-------------------------------------");

这是输出:
*********Calling composeStream************
ram
sam
dam
lam
Subscriber 1: LAM
ram
sam
dam
lam
Subscriber 2: LAM
-------------------------------------

如何将上述冷流转换为热流?

最佳答案

您可以通过在冷流上调用“发布”将冷流转换为热流,它将创建一个 ConnectableFlux。
由于它是一个热流,除非您对其调用 connect 方法,否则即使您订阅了,也不会发生任何事情。试试这个例子:

   Flux<String> source = Flux.fromIterable(Arrays.asList("ram", "sam", "dam", "lam"))
.doOnNext(System.out::println)
.filter(s -> s.startsWith("l"))
.map(String::toUpperCase);

ConnectableFlux<String> connectable = source.publish();
connectable.subscribe(d -> System.out.println("Subscriber 1: "+d));
connectable.subscribe(d -> System.out.println("Subscriber 2: "+d));
connectable.connect();

输出是:

ram sam dam lam Subscriber 1: LAM Subscriber 2: LAM



第二个例子:
 Flux<String> source = Flux.fromIterable(Arrays.asList("ram", "sam", "dam", "lam"))
.doOnNext(System.out::println)
.filter(s -> s.startsWith("l"))
.map(String::toUpperCase);

ConnectableFlux<String> connectable = source.publish();
connectable.subscribe(d -> System.out.println("Subscriber 1: "+d));
connectable.connect();
connectable.subscribe(d -> System.out.println("Subscriber 2: "+d));

输出是:

ram sam dam lam Subscriber 1: LAM



通过这两个示例,您可以看到数据从我们调用“connect”方法的那一刻开始流动

关于reactive-programming - 如何在 Project Reactor 3 中将冷流转换为热流?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48076113/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com