Akka流映射与重试

Akka流映射与重试,akka,reactive-programming,akka-stream,Akka,Reactive Programming,Akka Stream,如果映射/处理流中的元素失败,我如何重试 我尝试在materializer中设置决策器,但它不提供重试。它只是将异常映射到监督阶段 谢谢把它当作一个提示,而不是完整的答案。我最近在futures和mapAsync中实现了类似的功能。有一个图书馆呼吁用不同的策略重新尝试未来,比如暂停或后退。但是这个方法有一个问题,因为akka流使用有界缓冲区,如果mapAsync缓冲的所有未来都失败了,那么您的管道将停止处理 解决此问题的另一种方法是构建一个带有反馈循环的流,将失败的消息推回开始。这是一个更好的解

如果映射/处理流中的元素失败,我如何重试

我尝试在materializer中设置决策器,但它不提供重试。它只是将异常映射到监督阶段


谢谢

把它当作一个提示,而不是完整的答案。我最近在futures和
mapAsync
中实现了类似的功能。有一个图书馆呼吁用不同的策略重新尝试未来,比如暂停或后退。但是这个方法有一个问题,因为akka流使用有界缓冲区,如果mapAsync缓冲的所有未来都失败了,那么您的管道将停止处理


解决此问题的另一种方法是构建一个带有反馈循环的流,将失败的消息推回开始。这是一个更好的解决方案,因为失败的解决方案不会阻塞您的管道,但是,我发现,以这种方式实施退避策略更难。

将其视为一个提示,而不是完整的答案。我最近在futures和
mapAsync
中实现了类似的功能。有一个图书馆呼吁用不同的策略重新尝试未来,比如暂停或后退。但是这个方法有一个问题,因为akka流使用有界缓冲区,如果mapAsync缓冲的所有未来都失败了,那么您的管道将停止处理


解决此问题的另一种方法是构建一个带有反馈循环的流,将失败的消息推回开始。这是一个更好的解决方案,因为失败的解决方案不会阻塞您的管道,但是,我发现用这种方式实施退避策略更难。

来自akka stream2.4.4您可以使用
recoverWithRetries
(文档)

这基本上允许您提供

  • 重试尝试的次数
  • 根据发生的故障切换到的替代源

  • akka stream的
    源代码
    都可以使用
    recoverWithRetries
    (文档)

    这基本上允许您提供

  • 重试尝试的次数
  • 根据发生的故障切换到的替代源

  • 它可用于
    源代码

    这是一个很好的建议,非常感谢。你能给我举一个有回退循环的流程的例子吗?我找不到这个主题的任何例子,所以你应该自己创建:(这是一个很好的建议,非常感谢。你能给我举一个有回退循环的流程的例子吗?我找不到这个主题的任何例子,所以你应该自己创建:(