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

标签 akka akka-persistence

我正在为一个项目评估 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/

相关文章:

AKKA 关机模式不起作用

Akka 用于持久工作队列

scala - 如何使用 Akka Persistence 保存流式数据

java - 同步(或 future 返回)调用 Akka UntypedPersistentActor?

scala - 如何在 parent 重新启动时停止 child Actor ?

scala - 如何有条件地将消息传递到特定的下一个阶段(以及其他阶段)?

scala - 如何从 Future[Iterator] 创建源?

scala - 找不到 key 'akka.version' 的配置设置

Akka 持久性 : deleting "old" messages in journal

java - Akka 持久性 - 当收到消息传递确认时,从日志中删除消息(或标记为已确认)