我希望在我的集群中有一个调度器,它会在一段时间后发送一些消息。从我看到的调度器是每个actorsystem的,从我的测试来看,它只针对本地actorsystem。而不是集群系统。因此,如果在一个节点上调度某个任务,如果它发生故障,那么所有调度的任务都会被丢弃。如果我创建了一个负责调度的Cluster Singleton,那么已经创建的调度在其他节点上重新创建后是否仍然存在?或者我应该将其作为具有已经创建的调度元数据结构的持久化参与者保留,并在preStart阶段重新调度所有持久化的内容?
798qvoo81#
如果集群单例先前所在的节点关闭或离开集群,则该集群单例将在另一个节点上重生。转世将从一个干净的石板开始:它不会记得它的“前世”。然而,如果它是一个持久化的参与者(或者,等价地,它的行为是Akka Typed中的EventSourcedBehavior),它将在启动时从事件流(和/或快照)恢复其状态。对于一个持久化的参与者,这通常不需要做任何事情preStart:持久化实现将负责重放事件。根据计划的任务数量以及如果您希望在整个群集重新启动时放弃计划,可以使用Akka Distributed Data将计划元数据分布在群集中(具有可调的一致性),然后让群集单例计划执行元读取该元数据。
EventSourcedBehavior
preStart
1条答案
按热度按时间798qvoo81#
如果集群单例先前所在的节点关闭或离开集群,则该集群单例将在另一个节点上重生。
转世将从一个干净的石板开始:它不会记得它的“前世”。
然而,如果它是一个持久化的参与者(或者,等价地,它的行为是Akka Typed中的
EventSourcedBehavior
),它将在启动时从事件流(和/或快照)恢复其状态。对于一个持久化的参与者,这通常不需要做任何事情preStart
:持久化实现将负责重放事件。根据计划的任务数量以及如果您希望在整个群集重新启动时放弃计划,可以使用Akka Distributed Data将计划元数据分布在群集中(具有可调的一致性),然后让群集单例计划执行元读取该元数据。