scala - akka-persistence中persistenceId的唯一性

标签 scala akka akka-persistence

我正在使用用于 akka-persistence 的 scala api 来持久化一组被组织成树的参与者实例。树中的每个节点都是一个持久的参与者,并根据从“根”节点到该节点的路径来命名。 persistenceId 设置为名称。例如,根节点 actor 具有 persistenceId 'root'。下一个节点有 persistenceId 'root-europe'。另一个参与者可能有 persistenceId 'root-europe-italy'。

每个参与者的状态包括其 child 的姓名列表。例如。 'root' actor 维护着一个包含 'europe'、'asia' 等的列表作为其状态的一部分。

我已经为这个系统实现了快照。当根被触发快照时,它会这样做,然后告诉每个 child 也这样做。

问题出现在快照恢复期间。当我重新创建一个具有 persistenceId = 'root' 的 Actor (通过将名称作为构造函数参数传递)时,该 Actor 收到的 SnapshotOffer 事件是错误的。例如,它是“root-europe-italy....”。这似乎与持久性契约(Contract)相矛盾,其中persistenceId 标识要恢复的参与者状态。我通过反转节点参与者的persistenceId(例如'italy-europe-root')解决了这个问题,所以这似乎与持久性模块检索文件的方式有关。请注意,我首先尝试了其他方法,例如我在节点名称之间使用了各种分隔符,或者根本没有分隔符。

有没有其他人遇到过这个问题,或者 akka-persistence 开发人员可以帮助我理解为什么会发生这种情况?

顺便说一句:我现在正在使用内置的基于文件的快照存储。

谢谢。

最佳答案

好的 - 所以问题出在 Akka 上,现在已经解决。见related ticket了解补丁何时发布。

关于scala - akka-persistence中persistenceId的唯一性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25304627/

相关文章:

Scala 类型类

scala - 使用 ReactiveMongo 和 Scala 更新插入许多记录

scala - 使用 TestActorRef 测试 actor 崩溃

playframework - 如何使用 Akka 2.3.x 运行 Play 2.2.x?

scala - 如何加入数据框(来自数据集的集合)?

java - 在bazel中过滤java_library中resource_jars的内容

scala - Spark Scala:无法导入sqlContext.implicits._

java - Java中如何获取akka的 Actor 名字?

scala - akka 集群感知路由器和 akka 集群分片的不同用例?

scala - Play框架重启时如何重新加载akka调度程序