akka-cluster:无法从缩小的节点中删除参与者

问题描述 投票:0回答:1

我在使用 akka 集群时遇到问题。

系统设置:2 个节点,每个节点有 2 个工作 Actor 实例。所有这些参与者(总共 4 个)都由应用程序中的单个参与者进行跟踪。

问题是,当其中一个节点缩小时,单例 Actor 仍然保留对已关闭节点中的 Actor 的引用。

我无法找出原因。

我不确定 akka 集群中的哪个部分负责处理此类场景,以及在哪里查找问题。

akka akka-cluster
1个回答
0
投票

这是预期的行为。仅仅因为一个 actor 消失(因为它被停止,它失败,它的节点,它的节点消失,其他)并不意味着

ActorRef
被删除或类似的事情。对于
ActorRef
的工作方式来说,这实际上是不可能的:它们只是可以传递/复制/等等的普通对象。

您有几个选择:

  1. 当 Actor 通过 watch

    watchWith
    终止时,Actor 可以
    注册接收消息
    。 (作为演员,您可以收到消息,这与
    ActorRef
    等普通对象不同。)

  2. 您可以以类似的方式监听集群成员的变化。

  3. 您可以使用内置的

    Receptionist
    来自动执行此类操作,而不是构建自己的单例来跟踪演员。

  4. 从根本上讲,在您所描述的系统中,消息发送者确实需要具有弹性。例如,如果这些工作参与者之一最终位于网络分区后面,它将无法响应或注销自身。除了上述之外,还必须有某种备份计划。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.