Scala 如何为Akka流中的特定错误类型创建指数重启策略?

Scala 如何为Akka流中的特定错误类型创建指数重启策略?,scala,stream,akka,Scala,Stream,Akka,我们有一个连接到Kafka的流,它需要根据异常类型具有不同的行为。例如,如果它有一个SQLException,它应该使用Supervision.Stop,但是如果它是retrieableexception,它应该使用Supervision.Restart 我还希望能够为那些需要重新启动的错误类型实施指数退避策略,但在一些测试中,我这样做似乎是将RestartSource与Decider一起使用会导致忽略Decider 对抛出特定错误类型的流实施指数退避策略的最佳方法是什么?要解决第一个问题,您可

我们有一个连接到Kafka的流,它需要根据异常类型具有不同的行为。例如,如果它有一个
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