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

How to recreate dynamically created persisted AKKA actors after crash

我正在为一个项目评估 Akka,我想弄清楚我是否可以通过将参与者状态保存在高可用数据存储中来使用 Akka-Persistence 实现服务的高可用性。 (我不打算使用 Akka-Cluster)

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

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

我如何才能知道我必须在恢复时创建哪些演员?还是我想做一些根本性的错误?

我觉得你的问题不够准确。例如,您问 How can I find out what actors I have to create upon recovery?... 我们怎么知道?只有您知道您的系统中存在哪些参与者。为什么不重新启动它们呢?好像只有你自己知道为什么不合适,但是你没有告诉我们为什么,所以我们帮不上什么忙。

话虽如此,我会尝试做出一些猜测并提出前进的方法。

我要做的第一个猜测是:

  • 除了动态创建 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 状态。然后,您只需根据状态动态重新创建所有这些参与者。