Akka ShardRegion.StartEntity 消息是否传播到实体演员?

Is Akka ShardRegion.StartEntity message propagapted to entity actor?

我正在使用 Akka 2.5.2 和 Scala 2.12.2。

sharding doc 提到为了让 crashed/rebalanced 分片恢复它们的实体,ShardRegion.ExtractShardI 必须处理 ShardRegion.StartEntity 消息。

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

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

否:分片 actor 不接收(afaik)由本地节点区域使用的 StartEntity 消息。

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

通常,您将 persistenceId 绑定为与 entityId 相同,而后者通常可以通过 self().path().name()

从 actor 的名称中检索到

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