Scala 如何停止整个Akka集群(分片)

Scala 如何停止整个Akka集群(分片),scala,akka,actor,sharding,akka-cluster,Scala,Akka,Actor,Sharding,Akka Cluster,如何通过一个参与者的切分(跨越多台机器-节点)停止整个集群 我知道我可以在“this”节点上停止actor系统context.system.terminate() 我知道我可以阻止本地的切分区域 我找到了.prepareForFullClusterShutdown(),但它实际上并没有停止节点 我想没有单一的命令可以做到这一点,但必须有某种方法来做到这一点。我知道没有现成的方法来做到这一点:总体预期是有一个外部控制平面(例如kubernetes)来管理这一点 但是,可以在集群的每个节点上都有一个

如何通过一个参与者的切分(跨越多台机器-节点)停止整个集群

我知道我可以在“this”节点上停止actor系统
context.system.terminate()

我知道我可以阻止本地的切分区域

我找到了
.prepareForFullClusterShutdown()
,但它实际上并没有停止节点


我想没有单一的命令可以做到这一点,但必须有某种方法来做到这一点。

我知道没有现成的方法来做到这一点:总体预期是有一个外部控制平面(例如kubernetes)来管理这一点

但是,可以在集群的每个节点上都有一个参与者,该参与者侦听成员资格事件并订阅pubsub主题。此参与者将跟踪当前群集成员身份,当被告知开始群集关闭时,它将向主题发布(例如)
ShutdownCluster
消息,并跟踪哪些节点离开。经过一段时间后(因为分布式pubsub最多只有一次),如果除此之外还有节点没有离开,它会再次发送它。最后,在集群中的所有其他节点都离开后,该参与者会关闭其节点。当其他节点看到
ShutdownCluster
消息时,它们会立即关闭自己


当然,这种方案可能无法很好地与任何形式的外部编排配合(无论是kubernetes、mesos或nomad等容器调度器,甚至是monit之类的简单程序,它会注意到服务没有运行并重新启动)。

谢谢,在每个节点上订阅
MemberPreparingForShutdown
,可以按预期工作。(我没有任何配器,只有咕噜声,所以不会干扰)