问题标签 [akka-persistence]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
akka - akka persistentview 可以以与持久化相反的顺序接收消息吗?
换句话说,能否从日记中快速访问最近的消息历史记录?
比如说,按顺序保存的日志消息:
A、B、C、D、E 连续。
持久视图能否按顺序接收消息:E、D、C、B 和 A?
scala - 销毁 PersistentActor
与 Akka Persistence 2.3.10 相关的问题
是否有一种简单的方法可以PersistentActor
在不再需要时优雅地停止?目前,我在接收到自定义终止消息时从参与者中手动删除所有日志消息和快照,但是是否有任何开箱即用的功能呢?
scala - 有没有办法告诉持久性后端在使用持久性actor时无法访问?
我正在使用 EventStore 作为后端与 Scala 中的持久性参与者合作。测试基于 specs2。在规范类的初始化期间,在正在实例化的另一个类的构造函数中,我向我的演员询问一些事情,如果 EventStore 没有运行,请获取
引起的
AuthenticationModel
我的演员的名字在哪里。
问题是,
首先,为什么我的演员没有回应提问?请求的命令没有被持久化,并且actor此时还没有收到任何持久化的命令来改变它的状态,因为它刚刚被创建。
其次,如何检测到后端没有预先运行以向用户发出警告?
actor - 通过 Akka PersistenceActor 将基础设施问题泄露到域中
实践 DDD 时的领域模型应该是丰富的,没有基础设施问题。存储库就是这样一个例子。拥有企业总线也是如此。域不应该依赖于这样的实现。应用服务可能正在做这项工作。
被提升为与 DDD 中的聚合相同的 Akka Actor 是合适的,但是拥有PersistentActor会将基础设施问题泄漏到域中。
从PersistentActor派生的像OrderManager这样的聚合将包括领域概念和持久性问题。如何通过将基础设施关注点从域中移出来进行分离?
是否有两个演员,一个来自ReceiveActor的OrderManager演员和另一个来自PersistentActor的解决方案?
akka - Akka 持久化 receiveRecover 接收来自其他参与者实例的快照
我在使用 Akka 持久性时遇到了意外行为。我对 Akka 还很陌生,所以如果我错过了一些明显的东西,请提前道歉。
我有一个叫 PCNProcessor 的演员。我为我拥有的每个 PCN id 创建一个演员实例。我遇到的问题是,当我创建第一个演员实例时,一切正常,我收到了已处理的响应。但是,当我使用不同的 PCN id 创建更多 PCNProcessor 实例时,我得到了已经处理的 PCN响应。
本质上,由于某种原因,作为第一个 PCN id 处理器的一部分存储的快照被重新应用到后续的 PCN id 实例,即使它与该 PCN 无关并且 PCN id 不同。为了确认这种行为,我在 receiveRecover 中打印了一个日志,并且每个后续 PCNProcessor 实例都会收到不属于它的快照。
我的问题是:
- 我是否应该以特定方式存储快照,以便根据 PCN Id 键入它们?然后我应该在上下文中过滤掉与 PCN 无关的快照吗?
- 或者 Akka 框架是否应该在幕后处理这个问题,我不必担心根据 PCN id 存储快照。
演员的源代码如下。我确实使用分片。
更新:
注销接收到的快照的元数据后,我可以看到问题是 snapshotterId 没有正确解析,并且总是被设置为 pcn-processor- ${pcnId.toString}而没有解析斜体位。
[信息] [06/06/2015 09:10:00.329] [ECP-akka.actor.default-dispatcher-16] [akka.tcp://ECP@127.0.0.1:2551/user/sharding/pcn/16b3d4dd -9e0b-45de-8e32-de799d21e7c5] 正在恢复。PCN ID:16b3d4dd-9e0b-45de-8e32-de799d21e7c5,快照元数据SnapshotMetadata(pcn-processor-${pcnId.toString},1,1433577553585)
akka - Akka 持久性测试方法
我熟悉这里定义的 Akka 测试方法:
http://doc.akka.io/docs/akka/snapshot/scala/testing.html
我了解如何使用 TestKit、TestActorRef、TestProbe 等。我还了解我的核心域逻辑应该与 Akka 隔离提取和测试。
我的问题是关于在 Akka Persistence Actor 上执行 TDD 的策略,即 PersistentActor 和 PersistentView。
我希望能够以相当低的开销、有效的方式测试以下类型的场景,即尽可能接近单元测试:
- 持久性参与者是否以正确的 id 持久化事件?
- 我的快照恢复状态是否正确?
- 我的观点是否阅读了正确的事件?
如果有人知道可以帮助我看到这一点的项目,我将不胜感激。
我能想到的一种方法是有一个测试 PersistentView 可以用来验证 PersitentActor 是否完成了它的工作。不过好像有点绕。
这不是测试 Akka 持久性框架本身,而是测试我的 Actors 是否已正确设置以使用它并且行为是否符合预期。
akka - Akka 集群分片:恢复日志损坏
这个问题可能有点模糊,但我不确定如何使它更精确。
在使用集群分片扩展时,您必须提供某种持久性日志,以便插件可以存储其元数据(ShardRegionAllocated 等)。
当新的参与者被实例化/跨节点移动以从其冻结状态中恢复时,将使用这些元数据。
假设您的日记因任何原因损坏(丢失一个条目,重复一个条目,等等)。这会导致参与者启动时出现非常糟糕的异常(持久性恢复失败),如果处理不当,可能会终止整个区域。
管理这种情况的最佳方法是什么?(我正在寻求堆栈任何级别的想法,从主管的政策到直接对期刊的某种干预)。谢谢,
D.
scala - PersistentActor 无法在 Future onComplete 中调用持久处理程序
我是使用 PersistentActor 的新手,当我尝试从未来的 onComplete 调用 updateState 时,失败,没有任何事情发生,尝试调试它,我确实进行了持久调用,但没有进入 updateState
scala - 在另一个持久化事件处理程序中调用持久化
我有一些代码从另一个持久化事件处理程序内部调用持久化,例如:
当我运行我的应用程序时,我看到日志消息“正在启动”,但我从未看到“已启动”。我想知道这是否会发生,因为我在另一个持久化中调用持久化。这是不应该做的事情吗?该文档对这种情况不是很明确。
我正在使用 Akka 版本 2.4-M1,所以我想这可能是问题的根源,但在我看来,这似乎更可能是不应该做的事情。
scala - 如何在生产中演化 akka-persistence 事件?
假设我们使用 akka-persistence 设计了我们的系统。现在,我们将事件存储在事件存储中。同时,系统在生产中,需要一个新功能。因此,我们发现最好的方法是在事件中添加或修改字段。假设通过更改字段名称或类型。
现在,我们有两个版本的事件,一个在生产中,一个在新部署中,它们不兼容。如果我们尝试从旧版本恢复数据,我们将失败。
除了数据迁移之外,最好的方法是什么?