我正在为一个项目评估 Akka,我正在尝试弄清楚我是否可以通过将参与者状态保存在高可用数据存储中来使用 Akka-Persistence 实现服务的高可用性。 (我不打算使用 Akka-Cluster)
我了解保存 Actor 状态的概念,但是我正在努力寻找一种方法来在备份主机上恢复失败(崩溃)的服务时重新创建 Actor (而不是 Actor 状态)。
在我的设计中,有许多动态创建的 actor,只有少数是在服务启动时创建的。
我如何才能知道我必须在恢复时创建哪些 Actor ?还是我试图做一些根本错误的事情?
最佳答案
我认为你的问题不准确。例如,您问 我怎样才能知道我必须在恢复时创建哪些 actors?
...我们怎么知道?只有您知道您的系统中存在哪些参与者。为什么不重新启动它们呢?似乎只有你自己知道为什么不合适,但你没有告诉我们原因,所以我们帮不上什么忙。
也就是说,我会尝试做出一些猜测并提出前进的方法。
我要做的第一个猜测是:
- 除了动态创建 actor 之外,您还可以动态终止它们。
- 您想重新启动所有动态创建的并且在崩溃时仍在运行的 actor,但不包括您已经终止的那些。
如果正确,请继续阅读...否则,请检查您的问题。
考虑哪些参与者正在运行
是您系统状态的一部分。该状态随以下事件发生变化:
- 一个 Actor 是动态启动的
- 一名 Actor 被解雇
您可以有一个持久性 actor 来管理该状态,并在发出上述事件时更新它。
您应该将该参与者添加到那些始终在服务启动时启动的列表中。
当该 actor 的重播完成时(它将收到 RecoveryCompleted
消息:http://doc.akka.io/docs/akka/current/scala/persistence.html#recovery-status),您将重建哪些 actor 现在正在运行
状态。然后,您只需根据状态动态重新创建所有这些参与者。
关于akka - 崩溃后如何重新创建动态创建的持久化 AKKA actor,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45977699/