跳到主要内容

如何阅读弹珠图?

Doubao 中英对照 How to read marble diagrams?

当我们介绍 Flux 和 Mono 时,展示了一个"弹珠图"的示例。这些图贯穿于整个 javadoc 中,用以更直观地解释操作符的行为。

在本节中,我们将更深入地探讨 Reactor 文档中这些弹珠图所使用的约定。首先,让我们看看最常见的操作符模式是如何表示的。

有些操作符是实例方法:它们的输出通过在源 Flux 实例上调用方法来产生(如 Flux<T> output = source.fluxOperator()):

常见操作符

另一些操作符是静态方法。它们仍然可以接受一个源作为输入参数,如 Flux<T> output = Flux.merge(sourceFlux1, sourcePublisher2)。这些操作符如下所示:

静态操作符

请注意,有时我们会根据操作符的输入表示多个变体或行为,此时只有一个操作符"方框",但源和输出的变体如下所示相互分开:

带有两个输入示例的操作符

以上是基本情况,但有些操作符会展示稍微更高级的模式。

例如,ParallelFlux 会创建多条轨道,因此它们有多个输出 Flux。这些输出上下排列,如下图所示:

并行操作符

窗口操作符产生一个 Flux<Flux<T>>:外层 Flux 通知每个窗口的开启,而内层 Flux 表示窗口的内容和终止。窗口表示为从外层 Flux 分支出来,如下图所示:

窗口操作符的输出

有时,操作符会接受一个"伴随发布者"作为输入(一个 Flux、Mono 或任意 Reactive Streams Publisher)。这类伴随发布者有助于自定义操作符的行为,操作符会使用伴随发布者的某些信号作为其内部行为的触发器。它们如下图所示:

带有伴随 Publisher 的操作符

既然我们已经了解了最常见的操作符模式,下面展示在 Flux 或 Mono 中可能出现的所有不同信号、事件和元素的图形表示:

所有类型的信号和事件

最后,同样地,我们还有_副作用_的图形表示,它们与 Reactive Streams 信号一同发生:

副作用:doOn* 处理器的表示

副作用:在图中