阿卡流图与重试

时间:2016-03-08 13:34:06

标签: akka reactive-programming akka-stream

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

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

由于

2 个答案:

答案 0 :(得分:0)

将其视为提示而非完整答案。我最近使用future和mapAsync实现了类似的功能。有一个名为retry的库,可以使用不同的策略重试期货,例如暂停或退出。但是这个方法有一个问题,因为akka流使用有界缓冲区,如果mapAsync缓冲的所有期货都失败了,你的管道就会停止处理。

解决此问题的另一种方法是使用反馈循环构建一个流程,将失败的消息重新启动。这是更好的解决方案,因为失败的人不会阻止您的管道,但是,我发现以这种方式实施退避策略更难。

答案 1 :(得分:0)

从akka-stream 2.4.4 ,您可以使用Source(文档here)。

这基本上允许你提供

  1. 重试次数
  2. 根据发生的故障切换到的替代来源
  3. 它适用于FlowSELECT * FROM table_a AS a WHERE a.ID not in( SELECT b.ID FROM table_b AS b )