Akka Streams循环示例文档无法正常工作

时间:2016-03-04 11:12:50

标签: scala akka akka-stream

我试图用一个简单的循环来构建一个Akka Stream。在阅读文档here并且没有运气之后,我试图将示例代码复制为起始基础,但这也不起作用。代码编译(在包含示例中缺少的源之后)但没有打印出来。看起来有些东西永远是背压,但我不明白为什么。

这是我的代码,非常感谢任何帮助:

import akka.actor.ActorSystem
import akka.stream.{ActorMaterializer, ActorMaterializerSettings}
import akka.stream.scaladsl._
import akka.stream.ClosedShape

object Simulate {
  implicit val system = ActorSystem()
  implicit val materializer = ActorMaterializer()

  def main(args: Array[String]): Unit = {

    // Define simulation flowgraph
    val g = RunnableGraph.fromGraph(GraphDSL.create() { implicit b =>
      import b._
      import GraphDSL.Implicits._

      val source  = add(Source.repeat[Int](1))
      val zip     = add(ZipWith[Int, Int, Int]((left, right) => left))
      val bcast   = add(Broadcast[Int](2))
      val concat  = add(Concat[Int]())
      val start   = add(Source.single[Int](0))
      val sink    = add(Sink.ignore)

      source ~> zip.in0
                zip.out.map { s => println(s); s } ~> bcast ~> sink
                            concat        <~          bcast
                zip.in1 <~  concat        <~          start
      ClosedShape
    })

    g.run()

  }
}

1 个答案:

答案 0 :(得分:1)

编辑:实际上似乎问题不是添加缓冲区,而是声明了订单入口/出口。

这有效:

zip.in1 <~ concat <~ start

concat <~ bcastGLuint index = 1的顺序与文档中的内容一致。