如何在崩溃后重新创建动态创建的持久性AKKA actor

时间:2017-08-31 09:14:40

标签: akka akka-persistence

我正在评估Akka的项目,我试图通过在高可用数据存储中保存actors状态来确定是否可以通过Akka-Persistence实现服务的高可用性。 (我不同意使用Akka-Cluster)

我理解了保存一个actor状态的概念但是我正在努力找到一种方法来重新创建演员(而不是演员状态)来恢复我在备份主机上的失败(崩溃)服务。

在我的设计中,有许多动态创建的actor,只有少数是在服务启动时创建的。

如何找出恢复后我必须创建的演员?或者我试图做一些根本错误的事情?

1 个答案:

答案 0 :(得分:1)

我认为你的问题不准确。例如,你问How can I find out what actors I have to create upon recovery? ......我们怎么知道?只有您知道系统中存在哪些actor。为什么不重新启动它们?只有你似乎知道为什么它不合适,但你没有告诉我们原因,所以我们无法提供太多帮助。

那就是说,我会尝试做一些猜测并建议一种前进的方法。

我要做的第一个猜测是:

  • 除了动态创建actor之外,还可以动态地终止它们。
  • 您想要重新启动所有动态创建的actor,以及在崩溃时仍在运行的那些actor,而不是那些已经终止的actor。

如果那是对的,请继续阅读......否则,请查看您的问题。

考虑which actors are running now是系统状态的一部分。该状态随以下事件而变化:

  • 演员是动态启动的
  • 演员被终止

你可以让一个持久的actor管理那个状态,在发出上述事件时更新它。

您应该将该actor添加到始终在服务启动时启动的那些actor。

当该演员的重播完成后(它将收到RecoveryCompleted消息:http://doc.akka.io/docs/akka/current/scala/persistence.html#recovery-status),您将重建which actors are running now状态。然后,您必须根据状态动态地重新创建所有这些actor。