我正在使用 Akka Stream 2.5.5 。我有Stream
其中:
Source.actorPublisher
map
,collect
等,我使用Recover来处理可能发生的异常。.withAttributes(supervisionStrategy(resumingDecider)))
现在,当我运行Stream时,我将akka.stream.actor.ActorPublisherMessage.Cancel
传播到我的Source Actor。来自文档:
/**
* This message is delivered to the [[ActorPublisher]] actor when the stream subscriber cancels the
* subscription.
*/
final case object Cancel extends Cancel with NoSerializationVerificationNeeded
sealed abstract class Cancel extends ActorPublisherMessage
令人惊讶的是,Stream中的任何Exception
都没有引发任何stage
。所以,我无法理解 why the stream subscriber cancels the subscription
。因此,我无法找到关于我的Stream失败的确切Cause
或Error
。
对这种情况的任何见解和推理都会非常有帮助。
答案 0 :(得分:0)
我终于通过使用recover stage
作为我的流的最后一个阶段找到了原因。以前,我在我的流的每个阶段之后使用多个recover
阶段,我记录错误并简单地将最后一个所需的值传递到下游。
现在,我在流的末尾只使用了一个recover stage
,如下所示:
.recover {
case e =>
println("****************************")
println("Throwing Exception. Cause: "+e.getMessage)
println("****************************")
throw e
}
添加此内容后,抛出了实际的异常,我找到了实际原因。在我的情况下,其中一个阶段有代码抛出该异常。