如何获取整个 Akka.net 集群的更新状态?

How do I get an updated state of an entire Akka.net cluster?

我在我的 akka.net 集群中创建了一个监控节点,我正在使用 cluster.SendCurrentClusterState(Self) 但并非所有节点都立即可见,有时一个节点离开集群,而日志显示该节点被正确删除,状态说节点已经运行了很长时间。

获取整个 akka.net 集群更新状态的 best/correct 方法是什么?

关于集群状态,有两个重要的属性值得记住:

  1. 不存在全局集群状态。每个节点对集群当前的状态都有自己的看法。这是采用点对点方法的自然效果(因此没有可以设置任意状态的单个主节点)。
  2. 集群状态不会立即更新。建立所有状态以达到最终收敛,但在当前集群节点状态被八卦给其他人之前可能需要一段时间。

目前最简单的集群状态是Cluster.Get(Context.System).State,其中包含有关当前已知成员以及无法访问的节点的信息。

另一种方法是cluster.Subscribe(Self, typeof(ClusterEvent.IMemberEvent), typeof(ClusterEvent.IReachabilityEvent))(演员去世时必须取消订阅)。这样您就可以在集群状态发生变化时得到通知。

关于确认删除的节点需要很长时间。根据 "long" 的含义,这可能是某个错误的标志。在那种情况下,如果您可以设置重现步骤的问题,那就太好了。