我正在更新一些实验喷码到akka-stream(2.0.2),所以我一点一点地浏览他的文档。我的需求之一是,如果我在流中检测到协议违规,我需要立即关闭流并启动客户端。
从Flow内部立即关闭(终止)流的正确方法是什么?
答案 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
方法将Flow
与transform
合并:
Flow[Tpe]
.map(...)
.transform(() ⇒ closeStage)
.map(...)