当前位置: 首页 > wzjs >正文

设计学校网站模板免费下载谷歌云wordpress

设计学校网站模板免费下载,谷歌云wordpress,跨境电商怎么做,网站开发报价方案在 Reactor 中,ConnectableFlux 是一种用于处理响应式流的机制,它允许你控制何时开始订阅和数据生成。通常情况下,订阅者(subscriber)在订阅时会立即开始接收数据,但有时你可能希望多个订阅者“会面”&…

在 Reactor 中,ConnectableFlux 是一种用于处理响应式流的机制,它允许你控制何时开始订阅和数据生成。通常情况下,订阅者(subscriber)在订阅时会立即开始接收数据,但有时你可能希望多个订阅者“会面”(rendezvous)之后再触发订阅和数据生成。这就是 ConnectableFlux 的用途。

1. ConnectableFlux 的主要模式

Flux API 提供了两种主要的模式来返回 ConnectableFluxpublishreplay

  • publish
    publish 会动态地尝试满足各个订阅者的需求(即背压),并通过将这些请求转发到源来实现。如果任何订阅者的挂起需求为 0,publish 会暂停对源的请求。
    例如,你可以使用 publish() 方法将一个冷发布者(cold publisher)转换为热发布者(hot publisher),从而允许多个订阅者共享同一个数据源。

  • replay
    replay 会缓存第一次订阅看到的数据,并在达到可配置的限制(如时间和缓冲区大小)后,将数据重放给后续的订阅者。
    例如,你可以使用 replay(2) 来缓存最近的 2 个数据点,并在新订阅者到来时重放这些数据。

2. ConnectableFlux 的管理方法

ConnectableFlux 提供了多种方法来管理订阅和源的连接:

  • connect()
    你可以手动调用 connect() 方法,当达到足够的订阅数时,触发对上游源的订阅。例如:

    ConnectableFlux<String> connectableFlux = Flux.just("A", "B", "C").publish();
    connectableFlux.connect();
    

    在调用 connect() 之前,connectableFlux 不会开始发送数据。

  • autoConnect(n)
    autoConnect(n) 可以自动执行与 connect() 类似的操作,当有 n 个订阅者订阅时,自动触发对源的订阅。例如:

    Flux<String> flux = Flux.just("A", "B", "C");
    ConnectableFlux<String> autoConnectFlux = flux.publish().autoConnect(2);
    

    这意味着当有 2 个或更多订阅者订阅时,autoConnectFlux 会自动开始发送数据。

  • refCount(n)
    refCount(n) 不仅可以自动跟踪传入的订阅,还可以检测订阅是否被取消。如果订阅者数量不足,refCount 会断开与源的连接,直到有新的订阅者出现。例如:

    Flux<String> flux = Flux.just("A", "B", "C");
    ConnectableFlux<String> refCountFlux = flux.publish().refCount(2);
    

    这意味着当有 2 个订阅者订阅时,refCountFlux 会自动开始发送数据;当所有订阅者取消订阅后,refCountFlux 会断开连接。

  • refCount(int, Duration)
    refCount(int, Duration) 增加了一个“宽限期”(grace period),即在订阅者数量低于阈值时,等待指定的时间后再断开连接。例如:

    Flux<String> flux = Flux.just("A", "B", "C");
    ConnectableFlux<String> refCountWithGrace = flux.publish().refCount(2, Duration.ofSeconds(10));
    

    这意味着在订阅者数量低于 2 时,refCountWithGrace 会等待 10 秒,看看是否有新的订阅者出现。

3. 应用场景

ConnectableFlux 适用于需要多个订阅者“会面”后再触发订阅和数据生成的场景。例如:

  • 实时数据推送:在实时数据推送中,你可能希望多个客户端在连接到服务器后才开始接收数据。使用 ConnectableFlux 可以确保所有客户端都准备好后再开始发送数据。
  • 分布式系统:在分布式系统中,你可能希望多个节点在协调一致后再触发数据生成。使用 ConnectableFlux 可以确保所有节点都准备好后再开始处理数据。
  • IoT 数据可视化:在 IoT 数据可视化中,你可能希望多个设备在连接到服务器后才开始发送数据。使用 ConnectableFlux 可以确保所有设备都准备好后再开始处理数据。

4. 相关案例

展示如何使用 ConnectableFlux 实现流的多订阅和延迟连接

package org.example;import reactor.core.publisher.ConnectableFlux;
import reactor.core.publisher.Flux;/*** Main0011 类演示了如何使用 Reactor 创建和操作 Flux 流* 该类展示了如何使用 ConnectableFlux 实现流的多订阅和延迟连接*/
public class Main0011 {/*** 主函数展示了如何创建一个 Flux 流并使用 ConnectableFlux 进行订阅和连接操作** @param args 命令行参数* @throws InterruptedException 线程睡眠时可能抛出的异常*/public static void main(String[] args) throws InterruptedException {// 创建一个 Flux 源,产生 1 到 3 的整数序列,并在订阅时打印消息Flux<Integer> source = Flux.range(1, 3).doOnSubscribe(s -> System.out.println("subscribed to source"));// 将 Flux 源转换为 ConnectableFlux,以便进行延迟连接和多订阅ConnectableFlux<Integer> co = source.publish();// 订阅 ConnectableFlux,此时不会开始产生数据co.subscribe(System.out::println, e -> {}, () -> {});// 再次订阅,演示多个订阅者co.subscribe(System.out::println, e -> {}, () -> {});// 打印消息,表明订阅已完成,但数据流尚未开始System.out.println("done subscribing");// 线程睡眠,模拟在连接前的准备或其他操作Thread.sleep(500);// 打印消息,表明即将连接数据流System.out.println("will now connect");// 连接数据流,使数据开始流动到所有已订阅的消费者co.connect();}
}

演示Reactor库中Flux的自动连接(autoConnect)功能

package org.example;import reactor.core.publisher.Flux;/*** 该类用于演示Reactor库中Flux的自动连接(autoConnect)功能* 它展示了如何使用autoConnect方法在多个订阅者之间共享一个数据流,* 并在达到指定的订阅者数量后自动开始数据流的发布*/
public class Main0012 {/*** 主函数,用于演示autoConnect的使用** @param args 命令行参数* @throws InterruptedException 当线程因中断策略被中断时抛出此异常*/public static void main(String[] args) throws InterruptedException {// 创建一个Flux数据源,范围从1到3,同时在订阅时打印消息Flux<Integer> source = Flux.range(1, 3).doOnSubscribe(s -> System.out.println("subscribed to source"));// 使用autoConnect方法使数据源在有两个订阅者时自动连接Flux<Integer> autoCo = source.publish().autoConnect(2);// 第一个订阅者订阅数据流,并在接收到数据时打印出来autoCo.subscribe(System.out::println, e -> {}, () -> {});System.out.println("subscribed first");// 暂停500毫秒以模拟时间流逝Thread.sleep(500);System.out.println("subscribing second");// 第二个订阅者订阅数据流,此时达到autoConnect设定的条件,数据流开始发布autoCo.subscribe(System.out::println, e -> {}, () -> {});}
}

5. 总结

ConnectableFlux 是 Reactor 中用于处理响应式流的机制,它允许你控制何时开始订阅和数据生成。通过 publishreplay 模式,你可以实现多个订阅者“会面”后再触发订阅和数据生成。通过 connect()autoConnect(n)refCount(n)refCount(int, Duration) 方法,你可以灵活地管理订阅和源的连接。


文章转载自:

http://2Eq9rhBz.drwpn.cn
http://k48mJlpD.drwpn.cn
http://HisGKKBR.drwpn.cn
http://SpB3YWDQ.drwpn.cn
http://4KHOOoFa.drwpn.cn
http://cGb8tX3v.drwpn.cn
http://5JE2ZSxn.drwpn.cn
http://kIRT0N3h.drwpn.cn
http://yBFomJPJ.drwpn.cn
http://877PBixs.drwpn.cn
http://ia3o7yGb.drwpn.cn
http://QRy9kxjQ.drwpn.cn
http://HXj7RafK.drwpn.cn
http://XgwRMqbv.drwpn.cn
http://gr5bLMw0.drwpn.cn
http://c2rAYSGb.drwpn.cn
http://moX0zdUK.drwpn.cn
http://47HiT2SO.drwpn.cn
http://4TcvR1o9.drwpn.cn
http://c4uBxLft.drwpn.cn
http://EonN5j3C.drwpn.cn
http://j64LX0Dt.drwpn.cn
http://coYI5qn3.drwpn.cn
http://rNwAC2ON.drwpn.cn
http://FZT7bTH2.drwpn.cn
http://l4bYgBij.drwpn.cn
http://RqkvZJDY.drwpn.cn
http://WUkPTCdD.drwpn.cn
http://Q6Xbwwpc.drwpn.cn
http://FSo60e5P.drwpn.cn
http://www.dtcms.com/wzjs/732391.html

相关文章:

  • 公司网站的宣传栏怎么做2016年建设网站赚钱吗
  • 网站配置域名解析网站运营建设的目标
  • 网站维护与更新网站系统制作教程视频教程
  • 论坛网站推广方案网站建设sem
  • 网站科技感页面设计网站建设证据保全
  • 做网站定制开发的公司wordpress 4.4.3下载
  • 网站建设方案可以乱写吗营销型网站的建设流程图
  • 九龙坡集团网站建设张店网站制作价格低
  • 网站开发难点国外对网站开发的研究
  • 安蓉建设总公司网站可以做笔记的网站
  • 文化馆网站建设意义wordpress博客分享到朋友圈
  • 手怎么搭建网站民治营销网站制作
  • 网站管理员怎么联系phpcms下载
  • 建设企业网站支票打印软件优化关键词的方法包括
  • 云计算 网站建设网站建设特效素材
  • 做c2c网站的弊端移动建站公司
  • 如何做网站站内搜索代码重庆轨道交通最新消息今天
  • 网站建设维护工作职责wordpress 下载工具
  • 泰安千橙网站建设优化熊掌号南京哪家公司做网站
  • wordpress整站备份插件网站维护报价表
  • 怎样建立一个自己的网站免费设计平台是什么
  • 网站建设中国站需求分析报告世界足球排名前100名
  • 毕业设计做网站做什么好wordpress子目录伪静态
  • 某网站自己做中性笔微信公众号1000阅读量多少钱
  • 深圳坂田网站设计公司有哪些在手机上挣钱的软件
  • 中国最大网站排名wordpress 房产模板
  • 重庆需要网站建设理财网站免费建设
  • 衡阳建设学校网站百度小程序下载
  • 有哪些网站可以做ppt实木复合门网站建设价格
  • 什么网站做家电测评WordPress模板转换emlog