首页 > 解决方案 > 如何正确重启一个actor系统并将其重新加入刚刚离开的akka​​集群?

问题描述

对 akka 集群来说,“重启一个actor系统”是什么意思?假设我有一个种子节点 A 和另一个节点 B,并且执行这些代码:

let clusterObjOnNodeB = Cluster.Get actorSystemB

clusterObjOnNodeB.JoinSeedNodes 
<| ImmutableList.Create<Address>(seq[
    Address.Parse @"path to node A"
]|>Seq.toArray)

clusterObjOnNodeB.Leave clusterObjOnNodeB.SelfAddress

如何在不释放actorSystemB的情况下重新启动actorSystemB并重新加入集群?

标签: c#f#akka.netakka-cluster

解决方案


您可以优雅地让参与者系统离开其当前集群并重新加入它(请记住,这是一个异步操作并且不会立即发生,因此如果您想等待它,您可以连接到已删除的事件)。

然而,这并不等同于重新启动参与者系统,这通常意味着终止并重新启动它。原因是参与者系统本身通常会保留很多内部状态,而不会简单地将自身重置为某个初始值。有时,单个参与者的状态可能会纠缠在一起,形成一种导致问题的形式。在这种情况下,重新启动一个(可能不相关的)系统将无济于事。


推荐阅读