gpt4 book ai didi

java - 当发布者线程数远高于消费者数时,Spring Reactor 会受益

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:45:45 28 4
gpt4 key购买 nike

我有以下用例:

  • N 个线程发布数据(N 可以从 10 到 1000 个线程),这些线程可以只使用本地计算机进行 HTTP 请求、jdbc 调用、纯 java 处理
  • 1 到 M 线程使用它进行 IO(发送 HTTP 请求,写入数据库...可能是批量的),这些线程不应该减慢发布者的速度。 M 不得超过 10 个线程。

N 个线程发布数据的速度可能比消费者消费它的速度快得多,但我们的想法是尽量减少发布者的减速。

我已经实现了一种基于 ArrayBlockingQueue 的方法,其中发布者写入,以及一个从队列中获取数据并处理它的线程,它有效但结果不是很好。

因此,我正在研究 Reactor 模式,尤其是 Spring-Reactor,看看它是否可以响应我的用例。是这样吗?

我读了:

在我发布线程的数量远高于消费者数量的情况下,这是正确的选择吗?

最佳答案

听起来您可能想看看 Reactor 的 PersistentQueue facility并将您的发布者与您的订阅者分开。这是一个普通的 Queue 实现,但它使用 Chronicle Queue 来实现持久性、故障转移和可重播性。它也非常非常快。

您基本上可以让发布者从一侧将数据推送到 PersistentQueue,而一组订阅者则从另一侧拉取数据​​。如果您已经在使用 Queue,它可能是您当前使用的替代品。

我需要在上面写一个 wiki 页面来展示一些基本的使用模式。

关于java - 当发布者线程数远高于消费者数时,Spring Reactor 会受益,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26843287/

28 4 0
文章推荐: java - 垃圾收集器和 String.intern()
文章推荐: java - List 不为空,但不能在没有空指针异常的情况下调用 .isEmpty