在Akka Streams中,Sink.fold()处理序列化了吗?

时间:2016-04-06 20:03:30

标签: scala akka-stream

我开始使用Akka流;我正在尝试创建一个从Web服务读取数据的流,然后将它们保存在S3中。 我想知道,如果我使用Sink.fold方法定义一个Sink(为了收集持久化元素的信息),发送到接收器的元素是一个接一个地处理还是并行处理? / p>

这是一个基本问题,但我无法在文档中找到明确的答案。

1 个答案:

答案 0 :(得分:4)

由于Sink.fold需要先前元素的结果将其与下一个元素组合,因此它必然是顺序的。

实际上它更像是Sink.foldLeft

换句话说,如果您使用a, b作为元素,并使用f折叠它们,则需要acc = f(zero, a)才能处理f(acc, b)。因此,在完成a的处理之前,无法处理b

来自api doc

  

一个Sink,它将为每个接收到的元素调用给定函数,为其提供先前的输出(或给定的零值),并将元素作为输入。返回的java.util.concurrent.CompletionStage将在输入流结束时以最终函数求值的值完成,或者如果在流中发出故障则完成,则为失败。