集群中分片迁移期间的 Akka Actor 内部状态

Akka Actor internal state during shard migration in a cluster

我们正在使用 Akka 分片将我们的 运行 actors 分布在多个节点上。这些参与者是持久的,我们将它们的内部状态保存在数据库中。

现在我们需要将ActorRef 添加到每个节点上的"metrics actor"、运行。分片中的每个参与者都应该将遥测数据发送到指标参与者——它必须选择正确的指标参与者,即 运行 在同一节点上本地。原因是,Metric actor 收集数据对等节点。

现在,我只想在 Main 方法(最初在每个节点上运行)中创建 Metric actor:

val mvMetrics : ActorRef = system.actorOf(MetricsActor("mv"), "mvMetrics")

然后将该引用作为 Actors props 对象的一部分传递给 ClusterSharding 初始化:

    ClusterSharding(system).start(
        typeName = shardName,
        entityProps = MyShardActor.props(mvMetrics),
        settings = ClusterShardingSettings(system),
        extractEntityId = idExtractor,
        extractShardId = shardResolver)

我的问题是,如果这样创建的参与者在节点之间迁移会发生什么,例如从节点 A -> B?我可以想象节点 B 上迁移的 props 对象与节点 A 上的相同,因此 ActorRef 保持不变,因此新创建的 actor 将向原始节点 A 发送指标数据?

谢谢

利用ActorRef.path怎么样?想象每个节点都有以某种方式命名的角色,然后角色将使用路径动态地找到相关指标角色。