Akka ShardRegion.StartEntity消息是否传播给实体actor?

时间:2017-06-18 23:23:34

标签: akka akka-cluster akka-persistence

我正在使用带有Scala 2.12.2的Akka 2.5.2。

sharding doc提到为了使崩溃/重新平衡的分片恢复其实体,ShardRegion.ExtractShardI必须处理ShardRegion.StartEntity消息。

如果实体本身需要恢复其内部状态,则必须实现PersistenceActor。为此,实体必须具有唯一的persistenceId

问题是,当一个实体重新启动时,它如何找到它的persistenceId?这是由ShardRegion演员传入的吗?

1 个答案:

答案 0 :(得分:1)

否:分片角色不会收到(afaik)本地节点区域消耗的StartEntity消息。

persistenceId是你从PersistentActor特征中覆盖的东西,你必须在稳定的方式中定义自己(即在重新启动时总是相同)。

通常,你将persistenceId与entityId绑定,后者通常可以使用self().path().name()

从actor的名称中检索

解决此问题的一种方法是确保发送到分片actor的所有消息都包含entityId,或者包含在“envelope”类中,或者通过公开sortId(与提取器相同)使用)。