Scala 如何关闭阿克卡河?

Scala 如何关闭阿克卡河?,scala,akka-stream,Scala,Akka Stream,我正在将一些实验性的spray代码更新到akka stream(2.0.2),所以我正在一点一点地浏览he文档。我的需求之一是,如果我在流中检测到协议冲突,我需要立即关闭流并启动客户端 从流内部立即关闭(终止)流的正确方式是什么?使用PushStage: import akka.stream.stage._ val closeStage = new PushStage[Tpe, Tpe] { override def onPush(elem: Tpe, ctx: Context[Tpe])

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


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

使用
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)
  }
}
您可以通过
transform
方法将
PushStage
Flow
相结合:

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

如果您还在读这篇文章,我刚刚注意到在2.4.2中,PushStage被弃用了。您将如何在GraphStage中实现这一点?我试着完成测试,但不是这样。我添加了一个新问题: