我处于一个典型的情况,我有一组工人演员正在从队列中获得工作。Worker 故障可能是暂时的并且是由于环境引起的,也可能是永久性的并且是由于无效的作业引起的。
在工人演员内部,我正在处理永久性失败案例,但是如何为临时案例实施重试?有了主管,我可以让演员重新启动,这对于尝试重置为工作状态是可取的,但是当它失败时我如何重试它正在处理的消息呢?
谢谢!
我处于一个典型的情况,我有一组工人演员正在从队列中获得工作。Worker 故障可能是暂时的并且是由于环境引起的,也可能是永久性的并且是由于无效的作业引起的。
在工人演员内部,我正在处理永久性失败案例,但是如何为临时案例实施重试?有了主管,我可以让演员重新启动,这对于尝试重置为工作状态是可取的,但是当它失败时我如何重试它正在处理的消息呢?
谢谢!
您需要实现命令模式。Command 是一个对象,它封装了要执行的操作及其参数,并且独立于 Actor 存在。如果 Actor 以可重试的方式失败,则主管将命令重新提交给 Actor。如果向 Actor 提供流并处理消息,则 Actor 必须填充命令列表并记录完成,以便它可以在正确的位置重新启动。如果流不可回退,那么您必须在开始之前将所有命令排队,并且 Actor 必须记录每个命令的完成状态,因此可以在暂时失败时重新提交链。
命令模式也可用于实现历史记录和撤消。
如果您正在使用 Akka 1.2 或 master,您可以覆盖 preRestart 以获取参与者崩溃时的当前消息。