为什么 Akka 流只有一个源和汇?

Why does an Akka stream has exactly one source and sink?

Akka Streams 文档明确指出,为了使流可运行,它必须 恰好 一个源和 恰好 一个接收器。我想知道是什么强加了这种约束。将多个源合并到一个从单个流分叉的多个接收器的场景都是非常合理的。这种限制是否有任何技术原因?

我假设您参考了 this 文档部分,它定义了 Akka Streams 的基本组件:

Source: A processing stage with exactly one output, [...]

Sink: A processing stage with exactly one input, [...]

Flow: A processing stage which has exactly one input and output, [...]

RunnableGraph: A Flow that has both ends "attached" to a Source and Sink respectively, and is ready to be run().

虽然前 3 个定义是清楚和真实的,但我认为 RunnableGraph 的定义是不完整的。 RunnableGraph 可以按照描述定义(即 source.via(flow).to(sink)),这是获得其中之一的最简单方法。然而,有更灵活和复杂的方式来定义 RunnableGraphs,例如 GraphDSL.

如果您查看 this 部分中的示例,您会看到 RunnableGraph 由多个来源 and/or 多个接收器构建而成。

更准确地说,RunnableGraph 是一个没有输入也没有输出的处理阶段(即有一个 ClosedShape)。