Scala 如何为Akka流中的特定错误类型创建指数重启策略?
我们有一个连接到Kafka的流,它需要根据异常类型具有不同的行为。例如,如果它有一个Scala 如何为Akka流中的特定错误类型创建指数重启策略?,scala,stream,akka,Scala,Stream,Akka,我们有一个连接到Kafka的流,它需要根据异常类型具有不同的行为。例如,如果它有一个SQLException,它应该使用Supervision.Stop,但是如果它是retrieableexception,它应该使用Supervision.Restart 我还希望能够为那些需要重新启动的错误类型实施指数退避策略,但在一些测试中,我这样做似乎是将RestartSource与Decider一起使用会导致忽略Decider 对抛出特定错误类型的流实施指数退避策略的最佳方法是什么?要解决第一个问题,您可
SQLException
,它应该使用Supervision.Stop
,但是如果它是retrieableexception
,它应该使用Supervision.Restart
我还希望能够为那些需要重新启动的错误类型实施指数退避策略,但在一些测试中,我这样做似乎是将RestartSource
与Decider
一起使用会导致忽略Decider
对抛出特定错误类型的流实施指数退避策略的最佳方法是什么?要解决第一个问题,您可以使用决策器模式:
val decider: Supervision.Decider = {
case _: ArithmeticException => Supervision.Resume
case _ => Supervision.Stop
}
implicit val materializer = ActorMaterializer(
ActorMaterializerSettings(system).withSupervisionStrategy(decider))
我不认为RestartSource
忽略了决策者。。。decider是物化器的一个属性,它是源启动所必需的。如果有,你应该向Akka Streams报告一个bug