[英]How to throw an exception in akka stream?
I would like to throw an exception as the following: 我想抛出一个异常如下:
Source.empty
.map {
throw new RuntimeException("Failed")
}
.runWith(Sink.foreach(println))
.onComplete {
case Success(_) =>
println()
case Failure(e) =>
println(s"Thrown ${e.getMessage}")
}
But the exception does not appears in the onComplete
method. 但是该异常不会出现在onComplete
方法中。 It prints 它打印
Exception in thread "main" java.lang.RuntimeException: Failed
at com.sweetsoft.App$.main(App.scala:30)
at com.sweetsoft.App.main(App.scala)
How to throw an exception, that will stop the stream and appears at the end? 如何引发异常,这将停止流并在末尾出现?
Akka has build in Error handling : Akka Supervision Strategies Akka内置了错误处理: Akka监督策略
val testSupervisionDecider: Supervision.Decider = {
case ex: java.lang.RuntimeException =>
println(s"some run time exception ${ex.getMessage}")
Supervision.Stop
case ex: Exception =>
println("Exception occurred and stopping stream",
ex)
Supervision.Stop
}
and you can use the supervision decider as 您可以将监督决策者用作
val list = List.range(1, 100)
Source(list).map { item =>
if ((item % 2) == 0) {
throw new RuntimeException(s"$item")
} else {
item
}
}.withAttributes(ActorAttributes.supervisionStrategy(testSupervisionDecider))
.runWith(Sink.foreach(println)).onComplete {
case Success(_) =>
println()
case Failure(e) =>
println(s"Thrown ${e.getMessage}")
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.