当前位置: 首页 > 知识库问答 >
问题:

在project reactor中有没有可能有一个对多个订阅者有独立背压支持的热发布者?

东门仲卿
2023-03-14

我的情况如下:

我有一个生成随机数据的生成器。生成的数据应由多个订户接收。由于生成的数据是随机的,我不能使用冷发布者,因为在冷发布者的情况下,有几个订阅者会收到不同的数据。因此,我需要一个热门出版商,但我不确定在热门出版商的情况下,如何从我的订阅者发出有界的请求。我的一个订阅者任务是CPU绑定的,而另一个任务是IO绑定的,所以第二个任务很可能会慢。在以下情况下,热门发布者的行为有点令人困惑:

  1. CPU 密集型订阅者发出无限制的请求
  2. IO 绑定订阅者发出有界请求,例如一次 100 个项目

在冷发布者的情况下,显然每个订阅者可以独立于其他订阅者控制背压,因此请描述在热发布者和多个订阅者的情况下背压如何工作,因为在我的情况下,CPU绑定订阅者接收数据的速率将是IO绑定订阅者的速率,这似乎不是最佳的,因为一个订阅者依赖于其他订阅者。

共有1个答案

杨轶
2023-03-14

我会说这取决于热门出版商,但您可能会期望它最多会遵循(编辑:最低)需求。

编辑:这完全取决于热门出版商,没有通用规则。

但从概念上讲,它们在不同的订户之间“共享”数据,因此为了不压倒其中一个订户,它们必须跟踪单个订户的请求并相应地将无关数据排队,或者对其源执行一个与订户之间的最低请求相匹配的请求Flux#publish()(从某种程度上讲,flu#share())执行后面的操作。

 类似资料:
  • 我正在寻找一种将多个订阅者附加到RxJava可观察流的方法,每个订阅者异步处理发出的事件。 我第一次尝试使用。flatMap(),但这似乎对任何后续订阅服务器都不起作用。所有订阅服务器都在同一线程上处理事件。 最终工作的是通过每次创建一个新的可观察的来消耗新线程中的每个事件: 输出: 以及多个订阅者的最终结果: 输出: 然而,这似乎有点笨拙。有没有更优雅的解决方案,或者RxJava不是一个很好的用

  • 本文向大家介绍如何在C#中订阅事件,我们可以在C#中为一个事件拥有多个订阅者吗?,包括了如何在C#中订阅事件,我们可以在C#中为一个事件拥有多个订阅者吗?的使用技巧和注意事项,需要的朋友参考一下 事件使类或对象在发生感兴趣的事件时通知其他类或对象。 引发事件的类称为发布者,而处理事件的类称为订阅者。 在事件中 一个事件可以有多个订阅者。订阅者可以处理来自多个发布者的多个事件。 没有订阅者的事件永远

  • 我想知道:如果我向主题T发布一个消息,过期5分钟,2分钟后,消费者订阅主题T--消费者会收到消息吗?

  • 问题内容: 是否可以在JVM中启动和关闭多个H2数据库? 我的目标是通过为每个用户/帐户分配自己的数据库来支持多租户。每个帐户的数据很少。帐户之间的数据永远不会一起访问,比较或分组;每个帐户都是完全独立的。每个帐户每天只能短暂访问一次,一个月只能访问几次。因此,将数据存储在单个数据库中几乎没有什么弊端,但也存在一些严重的弊端。 所以我的想法是,当用户登录特定帐户时,该帐户的数据库已加载。当该用户注

  • 问题内容: 我一直在寻找使用Redis Pub / Sub替代RabbitMQ。 据我了解,Redis的pub / sub拥有与每个订阅者的持久连接,如果该连接终止,则所有将来的消息都将丢失并掉在地板上。 一种可能的解决方案是使用列表(和阻止等待)将所有消息和pub / sub存储为通知机制。我认为这可以帮助我解决大部分问题,但是我仍然对失败案例感到担忧。 当订户死亡并重新联机时会发生什么情况,应

  • 是否可以像所附图像一样在表格中放置一个按钮?