【问题标题】:Is Akka ShardRegion.StartEntity message propagapted to entity actor?Akka ShardRegion.StartEntity 消息是否已传播到实体参与者?
【发布时间】:2017-06-18 23:23:33
【问题描述】:

我正在使用 Akka 2.5.2 和 Scala 2.12.2。

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

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

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

【问题讨论】:

    标签: akka akka-cluster akka-persistence


    【解决方案1】:

    否:分片 Actor 没有收到(afaik)StartEntity 消息,该消息由本地节点的区域消费。

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

    通常,您将persistenceId与entityId绑定,后者通常可以使用self().path().name()从actor的名称中检索

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

    【讨论】:

    • 感谢您的澄清。问题是实体需要在启动时开始一些内部工作(例如,监视外部资源的心跳),然后才能收到任何消息。我认为self().path().name() 方法可能是这种情况下唯一的解决方案。
    • 幸运的是 persistenceId 是 def,而不是 val
    猜你喜欢
    • 1970-01-01
    • 2018-12-24
    • 1970-01-01
    • 2014-07-29
    • 2021-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多