【问题标题】:Akka Stream - Source.fromPublisherAkka Stream - Source.fromPublisher
【发布时间】:2016-04-16 19:02:28
【问题描述】:

我正在尝试根据 akka 流快速入门指南执行以下代码:

implicit val system = ActorSystem("QuickStart")
implicit val materializer = ActorMaterializer()

val songs = Source.fromPublisher(SongsService.stream)

val count: Flow[Song, Int, NotUsed] = Flow[Song].map(_ => 1)

val sumSink: Sink[Int, Future[Int]] = Sink.fold[Int, Int](0)(_ + _)

val counterGraph: RunnableGraph[Future[Int]] =
  songs
    .via(count)
    .toMat(sumSink)(Keep.right)

val sum: Future[Int] = counterGraph.run()

sum.foreach(c => println(s"Total songs processed: $c"))

这里的问题是未来永远不会返回结果。与文档示例最大的不同是我的 Source。

我有一个播放枚举器,我将其转换为 Akka Publisher,从而生成了这个 SongsService.stream

当使用定义的列表作为来源时:

val songs = Source(list)

它有效,但使用 Source.fromPublisher 无效。

但这里的问题确实不是发布者,我可以做一个简单的操作,它可以工作:

val songs = Source.fromPublisher(SongsService.stream)
songs.runForeach(println)

它遍历数据库,创建播放枚举器,将其转换为发布者,然后我可以迭代。

有什么想法吗?

【问题讨论】:

  • 如果等待,songs.runForeach(println) 是否真的返回 Done
  • @Mullefa 刚刚意识到它没有。

标签: scala playframework akka akka-stream


【解决方案1】:

您的发布商可能永远不会完成。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-03-08
    • 2017-09-19
    • 1970-01-01
    • 2016-08-15
    • 2018-01-19
    • 1970-01-01
    • 1970-01-01
    • 2020-08-14
    相关资源
    最近更新 更多