Akka Streams文档明确指出,为了使流可以运行,它必须具有完全一个源并且完全一个接收器。我想知道是什么造成这种限制。将来自单个流的多个源合并到一个多个接收器的场景都是非常合理的。是否有任何技术原因支持这种限制?
答案 0 :(得分:2)
我将假设您参考this文档部分,该部分定义了Akka Streams的基本组件:
来源:只有一个输出的处理阶段,[...]
接收器:只有一个输入的处理阶段,[...]
流程:一个只有一个输入和输出的处理阶段,[...]
RunnableGraph :分别将两端“附加”到源和接收器的流,并准备好
run()
。
现在,前3个定义清晰明确,我认为RunnableGraph
的定义不完整。可以按照描述的方式定义RunnableGraph
(即source.via(flow).to(sink)
),这是获得其中之一的最简单方法。但是,有更灵活,更复杂的方法来定义RunnableGraph
,例如GraphDSL。
如果您查看this部分中的示例,则会看到RunnableGraph
来自多个来源和/或多个接收器。
可能更准确地说RunnableGraph
是一个没有输入且没有输出的处理阶段(即有一个ClosedShape
)。