Akka流映射与重试
如果映射/处理流中的元素失败,我如何重试 我尝试在materializer中设置决策器,但它不提供重试。它只是将异常映射到监督阶段Akka流映射与重试,akka,reactive-programming,akka-stream,Akka,Reactive Programming,Akka Stream,如果映射/处理流中的元素失败,我如何重试 我尝试在materializer中设置决策器,但它不提供重试。它只是将异常映射到监督阶段 谢谢把它当作一个提示,而不是完整的答案。我最近在futures和mapAsync中实现了类似的功能。有一个图书馆呼吁用不同的策略重新尝试未来,比如暂停或后退。但是这个方法有一个问题,因为akka流使用有界缓冲区,如果mapAsync缓冲的所有未来都失败了,那么您的管道将停止处理 解决此问题的另一种方法是构建一个带有反馈循环的流,将失败的消息推回开始。这是一个更好的解
谢谢把它当作一个提示,而不是完整的答案。我最近在futures和
mapAsync
中实现了类似的功能。有一个图书馆呼吁用不同的策略重新尝试未来,比如暂停或后退。但是这个方法有一个问题,因为akka流使用有界缓冲区,如果mapAsync缓冲的所有未来都失败了,那么您的管道将停止处理
解决此问题的另一种方法是构建一个带有反馈循环的流,将失败的消息推回开始。这是一个更好的解决方案,因为失败的解决方案不会阻塞您的管道,但是,我发现,以这种方式实施退避策略更难。将其视为一个提示,而不是完整的答案。我最近在futures和
mapAsync
中实现了类似的功能。有一个图书馆呼吁用不同的策略重新尝试未来,比如暂停或后退。但是这个方法有一个问题,因为akka流使用有界缓冲区,如果mapAsync缓冲的所有未来都失败了,那么您的管道将停止处理
解决此问题的另一种方法是构建一个带有反馈循环的流,将失败的消息推回开始。这是一个更好的解决方案,因为失败的解决方案不会阻塞您的管道,但是,我发现用这种方式实施退避策略更难。来自akka stream2.4.4您可以使用
recoverWithRetries
(文档)
这基本上允许您提供
akka stream的
源代码和流都可以使用recoverWithRetries
(文档)
这基本上允许您提供
重试尝试的次数
根据发生的故障切换到的替代源
它可用于源代码
和流
这是一个很好的建议,非常感谢。你能给我举一个有回退循环的流程的例子吗?我找不到这个主题的任何例子,所以你应该自己创建:(这是一个很好的建议,非常感谢。你能给我举一个有回退循环的流程的例子吗?我找不到这个主题的任何例子,所以你应该自己创建:(