如何解决在节点中断期间恢复 akka 实体actor
akka-cluster 模块用于在应用程序内进行聚类。
如果我们有一个设置,其中在一个节点上运行的实体参与者(我们可能有数百个参与者分布在节点上)被安排为每 1 分钟接收一次消息,(使用计时器/调度程序),当节点是优雅地和不优雅地主持演员关闭
我们如何确保在另一个节点上自动创建实体actor。实体演员是仅在收到第一条消息时才创建还是会在应用程序中没有任何逻辑的情况下自动创建。此外,演员的调度程序会发生什么。调度程序可以在迁移到其他节点后的actor上自动运行。请注意,到目前为止我不打算使用持久性?但是对于自动实体创建和消息调度的持久性是否有帮助
解决方法
如果实体 Actor 使用集群分片进行管理,您可以使用 remember entities 自动保持实体处于活动状态,直到实体自身钝化。在没有可靠持久存储附加到实例的 kubernetes 或类似环境中,这确实需要 Akka Persistence。
如果不使用集群分片,那么您可能必须使用持久性来实现类似的功能。
请注意,在重新平衡后,实体actor 的状态不会恢复,除非实体actor 以某种方式是持久的(例如,通过使用 Akka Persistence 对其本身进行事件源)。该状态将包括定时器状态。实体actor被重新创建(最通常使用Behaviors.setup
(我忘记Java API是否使用该名称)),因此取决于actor应该做什么来响应该消息:
-
如果“每分钟”意味着“每分钟不超过一次”,那么实体actor应该开始每分钟调度作为其设置的一部分;如果崩溃/重新平衡发生在最后一条预定消息后 59 秒,则会有一个间隙,但如果该消息导致例如轮询某些外部资源,则该间隙最终可能无关紧要。
-
如果“每分钟”意味着“每分钟至少一次”,那么实体actor可以立即向自己发送调度消息并设置计时器。然后,如果崩溃/重新平衡在最后一条预定消息之后立即发生,则预定消息的影响之间的时间会比正常时间短,但不会有数分钟的间隔。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。