如何解决Akka Cluster Scheduler - 节点宕机时会发生什么
我想在我的集群中有一个调度程序,它会在一段时间后发送一些消息。从我看到的调度程序是每个actorsystem,从我的测试只针对本地actor系统。不是集群一。所以如果在一个节点上调度某事,如果它宕机了,那么所有调度的任务都会被丢弃。
如果我创建一个负责调度的集群单例,已经制定的调度能否在其他节点上继续存在?或者我应该将它保留为具有已经创建的时间表元数据结构的持久参与者,并在 preStart 阶段重新安排所有持久化的内容?
解决方法
如果之前所在的节点宕机或离开集群,集群单例将在另一个节点上转世。
那个轮回将从一个干净的石板开始:它不会记得它的“前世”。
然而,如果它是一个持久的actor(或者,等效地,它的行为是 Akka Typed 中的 EventSourcedBehavior
),它将在启动时从事件流(和/或快照)中恢复其状态。对于持久性参与者,这通常不需要执行任何操作preStart
:持久性实现将负责重放事件。
根据调度的任务数量以及如果您希望在完整的集群重启时丢弃调度,可能可以使用 Akka Distributed Data 将调度元数据分布在集群周围(具有可调整的一致性),然后让集群单例调度参与者读取该元数据。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。