akka如何处理它自己生成的多重源源

时间:2018-06-01 11:21:24

标签: akka-stream

嗨,我有一个情景,其中有一个源自己生成的源。将要生成的源数量尚不清楚。是否有适当的设计模式来处理这种情况。基本上它看起来像Source -----> Multiple Sources -------> Sink

修改

此方案如下:

  1. 从数据库迭代器中创建一个源
  2. 对于上述源提供的每个数据库文件,将文件转换为Source
  3. 将这些动态创建的源附加到文件IO sink
  4. 基本上我希望通过带有反压的流将大量数据库内容写入单独的文件

1 个答案:

答案 0 :(得分:0)

给出Storage a; one.toStore = ExtendedA<int, char, etc...>(); 来源:

Source

可以使用Source.runForeach将每个type Data = ??? val sos : Source[Source[Data, _], _] = ??? 来源排放到单个文件接收器中。

我们首先需要一个可以生成您想要写入数据的Data的函数:

Path

val pathCreator : () => Path = ??? 转换为Data的方式:

ByteString

最终可以将这些功能组合起来以获得您正在寻找的行为:

val dataToByteString : Data => ByteString = ???

如果您想要val drainSourceToFile : Source[Data, _] => Future[IOResult] = _.map(dataToByteString) .to(FileIO.toPath(pathCreator())) .run() sos runForeach drainSourceToFile 中的所有IOResult值,以便您可以知道写作是否成功,那么您需要稍微复杂的设置:

FileIO.toPath