Akka Stream DSL图表KillSwitch

时间:2017-04-22 14:37:15

标签: scala stream akka-stream

我正在玩Akka Streams并使用Alpakka从文件中传输内容。我需要在一段时间后停止流,所以我想使用KillSwitc h。但我不知道如何使用它,因为我正在使用图形DSL。

我的图表如下所示:

val graph = RunnableGraph.fromGraph(GraphDSL.create() { implicit builder: GraphDSL.Builder[NotUsed] =>
  import GraphDSL.Implicits._

  source ~> mainFlow ~> sink

  ClosedShape
})

graph.run()

我在这里找到了一个解决方案:How to abruptly stop an akka stream Runnable Graph?

但是,如果我使用图形DSL,我也不知道如何应用它。你能给我一些建议吗?

1 个答案:

答案 0 :(得分:2)

要在GraphDSL中显示实例化值,您可以将实现该值的阶段传递给create方法。用一个例子更容易解释。在你的情况下:

  val switch = KillSwitches.single[Int]

  val graph: RunnableGraph[UniqueKillSwitch] =
    RunnableGraph.fromGraph(GraphDSL.create(switch) { implicit builder: GraphDSL.Builder[UniqueKillSwitch] => sw =>
    import GraphDSL.Implicits._

    source ~> mainFlow ~> sw ~> sink

    ClosedShape
  })

  val ks = graph.run()
  ks.shutdown()