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 (与提取器使用的相同)。
我正在使用 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 的所有消息都包含 entityId,方法是将其包装在 "envelope" class 中,或者通过公开某种类型的 entityId (与提取器使用的相同)。