问题标签 [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.
java - Akka 持久性 - 恢复问题 - 如何诊断?
我正在使用 java 版本的 akka-persistence 2.3.4,其中我有几个扩展 PersistentActor 并同时处理 RecoveryCompleted 和 RecoveryFailure 的演员。我正在使用默认的日志和快照插件。
我遇到了一个恢复问题,在我的一些演员身上,我既没有收到 RecoveryCompleted 也没有收到 RecoveryFailure 消息,而且演员卡住了。
我可以使用什么样的诊断来找出为什么会发生这种情况?
我尝试打开调试日志记录,但那里没有显示 akka 日志记录。
java - 如何让 akka 事件溯源(akka-persistence)使用并行日志actor
我正在测试事件溯源(akka-persistence)并编写了我自己的 Journal 插件。但是在运行性能测试时,我很快注意到并不是所有的 CPU 资源都被使用了。将消息写入日志的类是参与者(例如,串行执行所有写入操作)。
是否可以使用此日志参与者的多个实例来提高日志后端的写入性能?如果是,如何?
谢谢
java - 引导数据播放框架 2.3.3
我有一个正在运行的项目框架,我希望在首次构建应用程序时(在运行“激活器运行”之后)预加载一些数据。
据我了解,过去是通过在 /conf 文件夹中创建一个“initial-data.yml”文件然后拥有一个 Bootstrap.java 文件来实现的,如下所示:
但是,这不再有效。
如何在 play framework 2.3.3 中将数据预加载到我的项目中?
scala - 如何在测试的持久性视图中拦截 Akka 消息?
有了演员,我可以写这样的东西:
但是我如何拦截复制到持久性视图的消息呢?
scala - Akka 的 context.become 奇怪的行为
在 PersistentActor 中使用 context.become 时,我遇到了一种奇怪的行为(不确定持久性是否与问题的原因有关)。我的代码是这样的:
我在同一个 MyActorSpec 文件中有两个测试。第一个只是测试“空闲”状态,第二个测试“就绪”状态:
如果我运行这两个测试,第一个成功,但第二个失败等待就绪消息(如第二个测试中的注释中所述)。如果我只运行第二个测试,它就会通过。所以,我不确定我在定义演员时是否做错了什么。
更新:我尝试按照建议删除Started
事件(persist(Started)
部分)的持久性,并且测试按预期工作(两个参与者都是在该idle
州创建的)。所以,发生的事情是第一个actor实例上的事件被持久化,然后第二个actor实例正在重放它们,这是因为actor实例是用相同的persistenceId
(DOH!)创建的。因此,使测试独立的方法是简单地用不同的persistenceId
.
scala - akka 坚持与否
当前应用程序将 Akka事件流及其发布/订阅用于导入大量数据的用例,并在接收到它发布和事件的每一行的数据时,并且有一个订阅者。如果发布者/订阅者出现问题,这种设计就有丢失事件的风险。
我想知道在这里使用 Akka 持久性是否有意义,有几个原因
1) 保留事件 2) 审计历史 3) 使用快照重新创建场景
请注意,系统中没有共享/全局状态(在几乎所有 Akka 持久性博客/示例中通常被描述为用例)。
Akka 持久性在这里有意义吗?
akka-persistence - 快照插件和事件存储的最轻量级的内存和 CPU 组合可能是什么?
我们将 Akka Persistence for POC 用于内部指标收集服务器解决方案。此时,我们希望尽可能保持轻量(内存和 CPU 方面)。我们正在使用内存日志和文件快照。一切正常,我们唯一的问题是我们拥有的快照数量。我们已经删除了除最后一个快照之外的所有快照(当然是每个持久性参与者),但文件数量仍然太大(我们正在创建很多参与者)。
那么,有什么建议可以让我们保持轻松的快照插件/事件存储的最佳组合是什么?
- H2/德比 + JDBC?
- 带有--smallfiles的本地MongoDB?
- 尝试以某种方式使用嵌入式 Mongo(到目前为止我所看到的只是用于测试目的,不确定它是否足够稳定)?
- 其他想法?
请注意,我们目前不打算进行分布式,性能测试为我们的用例提供了足够好的数字,所以留在同一台机器上是合适的并且应该足够了。
rest - 使用 Akka + Persistence 设计一个简单的 REST API
我正在构建一个简单的 REST API,用于生成一些必须从 API 定期创建和发送的对象。对象的性质无关紧要,支持 REST 接口的框架(Spray、Play Framework 等)也无关紧要。我的问题是,对于这个使用 Akka 的系统来说,一个好的可扩展的 Actor 设计是什么?假设服务崩溃或被迁移或任何导致它停止的原因。为了恢复关于必须发送哪些对象以及何时发送的任务描述,akka-persistence 是一个很好的方法吗?或者最好将这些东西保存在传统数据库中?
谢谢。
注意:我也想知道,假设有一些演员自己不是有状态的,但创建了许多孩子演员,如果使用 akka-persistence 来重播导致该演员再次创建他的孩子的消息是一个好习惯(孩子也是无状态的)。
java - 使用 Play 框架的 akka 持久性
我已经设置了一个Play Framework项目,并且我想与它一起使用akka-persistence。我下载了用于 akka-persistence 的 JAR 并将其放在我的 Play 项目的 lib 文件夹中。akka-persistence 类被识别,我可以编译和运行应用程序,但是一旦应用程序启动,它就会抛出NoClassDefFoundError
异常并且应用程序停止。我之前已经成功使用过 akka-persistence(尽管没有使用 Play Framework 项目)。有什么提示吗?
注意:我使用的是 Play Framework 2.3.4(我相信它使用 Akka 2.3.4,并手动删除了 akka-persistence 模块)。我到处都在使用Java(不是Scala)。akka-persistence 的 jar 是 akka-persistence-experimental_2.11-2.3.4.jar。抛出的异常和堆栈跟踪如下:
我的 build.sbt:
scala - 仅在所有事件都持久化后更新参与者状态
在持久化actor的receive方法中,我接收到一堆我想要持久化的事件,只有在所有事件都持久化之后,再次更新我的状态。我怎样才能做到这一点?
请注意,persist() 调用不会阻塞,因此我不能在此之后放置我的代码。
更新:为什么我需要这个
这些新事件来自外部 Web 服务。我的持久角色需要在其状态中存储最后一个事件 id,当它接收到命令时,它将用于后续的 ws 调用。问题是这些命令可能同时出现,所以我需要某种锁定系统:
- 接收到的 ws 调用命令:隐藏下一个命令,直到这个命令完成(也就是说,总而言之,一个布尔值)
- 收到来自 ws的响应:存储它们,更新状态并保存最后一个 id,对存储中的所有命令执行另一个单个 ws 调用(我让命令发送者能够在完成后全部响应它们)否则不要再隐藏命令了。