如何实现瞬态Actor失败的重试?

时间:2011-08-05 01:09:21

标签: java design-patterns concurrency akka

我处于一种典型的情况,我有一组工作人员从队列中获取工作。工作人员失败可能是暂时的,也可能是由于环境造成的,也可能是永久性的,也可能是因为工作无效。

在工作人员内部,我正在处理永久性故障情况,但是如何实现瞬态情况的重试?使用管理程序,我可以让actor重新启动,这是尝试重置为工作状态的理想选择,但是如何在失败时重试它正在处理的消息呢?

谢谢!

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

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

相关问题