【问题标题】:How to Implement Retry on Transient Actor Failure?如何实现瞬态 Actor 失败的重试?
【发布时间】:2011-08-05 01:09:21
【问题描述】:

我处于一个典型的情况,我有一组工人演员正在从队列中获取作业。 Worker 故障可能是暂时的并且是由于环境造成的,也可能是永久性的并且是由于无效的作业造成的。

在工作人员演员内部,我正在处理永久性失败案例,但如何为临时案例实施重试?有了监督者,我可以让演员重新启动,这对于尝试重置为工作状态是可取的,但是当它失败时我如何重试它正在处理的消息?

谢谢!

【问题讨论】:

    标签: java design-patterns concurrency akka


    【解决方案1】:

    您需要实现命令模式。 Command 是一个对象,它封装了要执行的操作及其参数,并且独立于 Actor 存在。如果 Actor 以可重试的方式失败,则主管将命令重新提交给 Actor。如果向 Actor 提供流并处理消息,则 Actor 必须填充命令列表并记录完成,以便它可以在正确的位置重新启动。如果流不可回退,那么您必须在开始之前将所有命令排队,并且 Actor 必须记录每个命令的完成状态,因此可以在暂时失败时重新提交链。

    命令模式也可用于实现历史记录和撤消。

    【讨论】:

    • 好吧,我在正确的轨道上听起来像 - 我已经有一个命令对象(消息)。我想我只需要深入了解主管是如何工作的。我猜我需要每个工人一个主管,这样他们就可以保留对正在处理的命令的引用。谢谢!
    【解决方案2】:

    如果您使用的是 Akka 1.2 或 master,您可以覆盖 preRestart 以获取 actor 崩溃时的当前消息。

    【讨论】:

      猜你喜欢
      • 2016-05-27
      • 1970-01-01
      • 2015-12-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多