Scala 如何关闭阿克卡河?
我正在将一些实验性的spray代码更新到akka stream(2.0.2),所以我正在一点一点地浏览he文档。我的需求之一是,如果我在流中检测到协议冲突,我需要立即关闭流并启动客户端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])
从流内部立即关闭(终止)流的正确方式是什么?使用
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中实现这一点?我试着完成测试,但不是这样。我添加了一个新问题: