Project Reactor 中的预取是什么意思?

2024-02-04

我正在使用 Project Reactor 并且正在使用Flux.flatMapIterable https://projectreactor.io/docs/core/release/api/reactor/core/publisher/Flux.html#flatMapIterable-java.util.function.Function-int-。 (我基本上有一个对象 A 的流;对于每个对象 A,我将其平面映射到对象 B 的流中,并从中创建一个新的通量。)

我试图理解什么prefetch设置确实如此。就我而言,每个对象 A 都可能转换为任意数量的对象 B(0 到 N 之间;N 很大)。

我只是想了解:

  • 什么是预取?它只适用于最初的请求吗? (也就是说,如果我将其设置为 1,如果 Project Reactor 发现 1 太小,它是否足够智能,可以增加请求大小?)

  • 这与我这里的情况有关吗?为了保守起见,我正在考虑将预取设置为 1,因为单个 A 对象有可能被平面映射到大量 B 对象中。


预取将影响 Reactor 在其第一个请求中从 Publisher 请求的项目数量。这是一个影响后续请求的上限,当预取量的 75% 已发出时,后续请求将被触发,因此不会自动增加。

它通常用于消费者请求大量数据但数据源表现更好或可以通过较小的请求进行优化的场景(例如数据库分页等)。

它是否与您的用例相关取决于您的发布商的特征。

来自配置背压的[文档]1 https://projectreactor.io/docs/core/release/reference/#_on_backpressure_and_ways_to_reshape_requests

您可能还注意到,某些运算符具有以下变体: 采用称为 prefetch 的 int 输入参数。这是另一个类别 修改下游请求的运算符。这些通常是 处理内部序列的运算符,从 派生出 Publisher 每个传入元素(如 flatMap)。

预取是一种调整对这些内部发出的初始请求的方法 序列。如果未指定,这些运营商大多数都是从需求开始的 共 32 个。

这些运营商通常还会实施补货优化: 一旦操作员看到 25% 的预取请求得到满足,它就会 向上游重新请求 25%。这是一种启发式优化 以便这些操作员主动预测即将到来的请求。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Project Reactor 中的预取是什么意思? 的相关文章

随机推荐