【问题标题】:Uniqueness of persistenceId in akka-persistenceakka-persistence中persistenceId的唯一性
【发布时间】:2014-10-07 21:40:06
【问题描述】:

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

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

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

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

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

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

谢谢。

【问题讨论】:

  • 听起来很奇怪。我希望看到一个重现问题的最小化示例。也许您可以打开一个问题:github.com/akka/akka/issues您使用的是最新版本(2.3.4 还是 2.3.5)?
  • 这很奇怪。非常出乎意料。我目前使用的是 2.3.4 版本。我将按照建议打开一个问题,看看是否可以提供更多详细信息,以便轻松重现问题。
  • 这已经被this ticket覆盖了

标签: scala akka akka-persistence


【解决方案1】:

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

【讨论】:

  • 感谢您找到这个并贡献补丁@Brendan!
  • 我很高兴 - 很高兴看到这个过程。感谢您对我对所有这些好东西缺乏经验的耐心。
猜你喜欢
  • 2021-01-30
  • 1970-01-01
  • 2014-09-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-09
  • 2016-02-03
相关资源
最近更新 更多