如何关闭Akka流?

时间:2016-01-22 19:09:39

标签: scala akka-stream

我正在更新一些实验喷码到akka-stream(2.0.2),所以我一点一点地浏览他的文档。我的需求之一是,如果我在流中检测到协议违规,我需要立即关闭流并启动客户端。

从Flow内部立即关闭(终止)流的正确方法是什么?

1 个答案:

答案 0 :(得分:3)

使用PushStage

import akka.stream.stage._

val closeStage = new PushStage[Tpe, Tpe] {
  override def onPush(elem: Tpe, ctx: Context[Tpe]) = elem match {
    case elem if shouldCloseStream ⇒
      // println("stream closed")
      ctx.finish()
    case elem ⇒
      ctx.push(elem)
  }
}

您可以通过PushStage方法将Flowtransform合并:

Flow[Tpe]
.map(...)
.transform(() ⇒ closeStage)
.map(...)