【问题标题】:Akka Source not streaming data?Akka Source 不是流数据?
【发布时间】:2019-01-20 20:19:14
【问题描述】:
val pageDataFutures : Seq[Future[PageData]]= ??? //4 api calls each resulting in a future of PageData

  def source : Source[PageData, NotUsed] = Source(
    pageDataFutures.flatMap(future => Await.result(future,atMost)).toList
  )

  source.runForeach(println)

我希望源在每个未来完成时运行'runForEach'。但是,所有 4 个 api 调用都进行了,然后源中的数据都被一次打印出来。它不应该将数据打印为可用吗?我为每个未来使用Await。所以保证在下一个future是Awaited之前,前一个future的结果是可用的,可以被println使用

【问题讨论】:

    标签: scala akka akka-stream


    【解决方案1】:

    使用mapAsync:

    将传入元素传递给返回Future 结果的函数。当Future 到达时,结果被传递到下游。最多可以同时处理 n 元素,但无论它们的完成时间如何,当结果完成时,传入的订单将被保留。

    val pageDataFutures: Seq[Future[PageData]] = ???
    
    Source(pageDataFutures)
      .mapAsync(parallelism = 1)(x => x) // or: mapAsync(parallelism = 1)(identity)
      .runForeach(println)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-01-21
      • 2015-06-08
      • 2015-08-27
      • 1970-01-01
      • 2020-08-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多