Akka Cluster Scheduler - 当一个节点宕机时会发生什么

Akka Cluster Scheduler - what happens when a node goes down

我想在我的集群中有一个调度程序,它会在一段时间后发送一些消息。从我看到的调度程序是每个演员系统,从我的测试来看,仅针对本地演员系统。不是集群之一。因此,如果在一个节点上安排一些事情,如果它发生故障,那么所有计划的任务都将被丢弃。

如果我创建一个 Cluster Singleton 来负责调度,那么已经制定的调度是否可以在其他节点上重新创建?或者我应该将它作为一个具有已创建计划元数据结构的持久参与者,并在 preStart 阶段重新安排所有持久存在的内容?

如果先前所在的节点关闭或离开集群,集群单例将在另一个节点上重新生成。

那个轮回将从一个干净的石板开始:它不会记得它的“前世”。

但是,如果它是一个持久化 actor(或者,等效地,它的行为是 Akka Typed 中的 EventSourcedBehavior),它将在启动时从事件流中恢复其状态(and/or 快照) .对于持久性 actor,这通常不需要做任何事情 preStart:持久性实现将负责重放事件。

根据调度的任务数量以及如果您希望在整个集群重新启动时丢弃调度,可以使用 Akka 分布式数据将调度元数据分布在集群周围(具有可调整的一致性)然后让集群单例调度 actor 读取该元数据。