【发布时间】:2017-06-06 08:14:51
【问题描述】:
我正在尝试寻找解决以下限制的方法:从头开始启动 Akka 集群时,必须确保启动第一个种子节点。这对我来说是个问题,因为如果我有紧急情况要从头开始重新启动我的所有系统,谁知道一切所依赖的一台机器是否会正常运行?而且我可能没有时间花时间更改系统配置。因此,我尝试手动创建集群,而不依赖于静态种子节点列表。
现在我很容易让所有 Akka 系统在某处注册自己(例如,网络文件系统,通过定期触摸文件)。因此在启动新系统时可以
- 查找所有假定处于活动状态的系统的列表(即最近谁接触过文件系统)。
- 一个。如果没有,则新系统会自行加入,即单独启动集群。湾。否则,它会尝试使用所有其他假定活着的系统作为种子,使用
Cluster(system).joinSeedNodes加入集群。 - 如果 2。没有在合理的时间内成功,新系统会再次尝试,从 1 开始。(再次查找所谓的活跃系统列表,因为它可能在此期间发生了变化;特别是所有其他系统可能已经死亡,我们会最终落入 2.a.)。
我不确定如何实现 3.:我如何知道加入是成功还是失败? (需要订阅集群事件?)如果再次调用Cluster(system).joinSeedNodes 失败,是否有可能?官方文档在这一点上不是很明确,我不是 100% 如何在我的情况下解释以下内容(我可以做几次尝试,使用不同的种子吗?):
一个actor系统只能加入一个集群一次。额外的尝试将 被忽略。成功加入后,必须重新启动才能 能够加入另一个集群或再次加入同一个集群。
最后,让我准确地说,我正在构建一个小型集群(目前只有 10 个系统,它不会变得很大)并且必须不时从头开始重新启动(我不能假设集群将永远活着)。
谢谢
【问题讨论】:
标签: akka akka-cluster