【发布时间】:2016-07-10 19:09:42
【问题描述】:
根据akka streams docs,可以通过定义一个将Throwable 映射到Strategy 的决策器来处理流故障:
val decider: Supervision.Decider = {
case _: ArithmeticException => Supervision.Resume
case _ => Supervision.Stop
}
我想知道是否有办法也可以访问导致错误的元素。当然,这个元素的类型是未知的,但是有没有办法把它作为Object的实例来获取呢?
【问题讨论】:
-
如果有异常,则没有元素。异常不是由流元素引起的,而是由代码引起的。
Source.single(throw new Exception())中的“错误元素”在哪里? -
是的,但如果我有一个
Flow[Int, Int, ...],则有Ints正在流经管道,我需要找到导致流中异常的元素。 -
我支持@GiovanniCaporaletti。
Failures与errors根本不同 - 如果您的流因某些特定整数而失败(例如,它不喜欢数字42),您可以用try-catch包装有问题的阶段并在那里检查;您可以查看Throwable堆栈跟踪以了解哪个阶段导致了问题。另一方面,Failure意味着整个事情都爆发了,它通常不连接到单个元素(想想外部依赖崩溃、内存不足等) -
@Mihai238 可能会尝试编辑您的问题,添加一个“元素导致异常”并且您无法获得“那个元素”的示例。您将意识到流的元素与引发异常的特定阶段之间没有任何联系。在最坏的情况下,我们了解您想要实现的目标并找到解决方案。
标签: scala akka reactive-programming akka-stream