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

时间:2016-07-11 10:52:09

标签: scala akka sharding

我们正在使用Akka分片来将我们正在运行的角色分布在多个节点上。这些actor是Persistent,我们将其内部状态保存在数据库中。

现在我们需要将ActorRef添加到每个节点上运行的“metrics actor”。碎片中的每个参与者都应该将遥测数据发送给指标参与者 - 它必须选择在同一节点上本地运行的正确指标参与者。原因是,度量主体收集数据对等节点。

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

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

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

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

我的问题是,如果这些创建的actor在节点之间迁移会发生什么,例如来自节点A - > B'我可以想象节点B上的迁移道具对象与节点A上的迁移道具对象保持一致,因此ActorRef保持不变,因此新创建的actor将把度量数据发送到原始节点A?

由于

1 个答案:

答案 0 :(得分:1)

如何利用ActorRef.path?假设每个节点都以某种方式命名其actor,然后一个actor将使用该路径动态地找到相关的metrics actor。