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

C# 如何获取整个Akka.net集群的更新状态?,c#,akka.net,akka.net-cluster,C#,Akka.net,Akka.net Cluster,我在akka.net集群中创建了一个监视节点,我正在使用集群。SendCurrentClusterState(Self)但并非所有节点都立即可见,有时也会有节点离开集群,虽然日志显示节点已正确删除,但状态显示节点已运行很长时间 获取整个akka.net集群的更新状态的最佳/正确方法是什么?对于集群状态,有两个重要属性值得记住: 没有全局集群状态这样的东西。每个节点都有自己对集群当前的看法。这是采用点对点方法的自然效果(因此没有可以设置任意状态的单个主节点) 群集状态不会立即更新。所有状态都是为了

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


获取整个akka.net集群的更新状态的最佳/正确方法是什么?

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

  • 没有全局集群状态这样的东西。每个节点都有自己对集群当前的看法。这是采用点对点方法的自然效果(因此没有可以设置任意状态的单个主节点)
  • 群集状态不会立即更新。所有状态都是为了达到最终的收敛而构建的,但在当前集群节点状态将被告知其他节点之前,可能需要一段时间
  • 目前最简单的集群状态是
    cluster.Get(Context.System).state
    ,其中包含有关当前已知成员以及无法访问的节点的信息

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


    关于确认已删除节点所需的长时间。根据“long”的含义,这可能是某个bug的迹象。在这种情况下,如果您可以设置一个关于复制步骤的问题,那就太好了。

    我说的长时间是指半小时,有时更长。我不需要集群的即时完美表示,但似乎有什么问题。如果我将一个节点标记为down,集群说它已关闭,那么该状态至少应该在几秒钟后显示为down,可能是一分钟,对吗?在开始讨论之前,我会把这个带到gitter讨论。