问题标签 [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.
scala - 确认交付的 Akka 持久性给出不一致的结果
我一直在玩 Akka Persistence,并编写了以下程序来测试我的理解。问题是每次运行该程序时都会得到不同的结果。正确答案是 49995000,但我并不总是明白这一点。我已经在每次运行之间清理了日志目录,但没有任何区别。谁能看到出了什么问题?该程序只是将所有从 1 到 n 的数字相加(其中 n 在下面的代码中是 9999)。
正确答案是:(n * (n+1)) / 2。对于 n=9999,即 49995000。
编辑: JDK 8 似乎比 JDK 7 更一致。我应该只使用 JDK 8 吗?
SBT 文件
应用程序.conf 文件
正确的输出:
错误运行:
另一个错误的运行:
akka-persistence - 在编年史地图上快速排队?
我们正在为akka-persistence实现存储插件, 这意味着 2 个提供者,用于:
- 队列类日志插件 API
- 类似地图的快照存储插件 API
由于只有Chronicle Map支持多节点对称复制,因此我们将Chronicle Queue排除在外。
问题:在地图顶部创建快速队列的最佳方法是什么?谢谢你。
scala - 将依赖项注入集群持久 Akka 演员的正确方法?
我将Akka Persistence与Cluster Sharding一起使用。将依赖项提供给此类PersistentActor
-s的正确方法是什么?
据我了解,将它们作为构造函数参数传递是不可能的,因为集群分片正在创建这些参与者。
使用 Spring/Guice/等。不是惯用的Scala(并且可能还有其他问题(?))。
使用 anobject
来实现单例会导致繁琐的测试并且看起来很糟糕。
什么是正确的方法?
PS 如果您打算建议 Cake 模式,请在这个特定的 Akka Persistence Cluster Sharding 上下文中提供示例代码。
scala - 如何以高消息率保持参与者状态
我想开始使用带有大量消息的演员。演员的最后一个状态非常重要我遵循这里显示的持久性示例http://doc.akka.io/docs/akka/2.3.9/scala/persistence.html#event-sourcing 我试图发送大量的消息
并像这样使用persistAsync
在关机之前,我添加了 Thread.sleep(150000) 以确保所有内容都持续存在。起初似乎一切正常,但是重新运行该应用程序表明有些人会死信
==================================================== =======================
我怎样才能保持一个应该处理大量消息的actor的状态?
scala - 如何验证持久性过程是否已完成以便正常关闭系统?
使用 akka 演员 - 我正在向更新其状态的演员发送大量消息
并像这样使用persistAsync
如何验证持久性过程是否已完成以便正常关闭系统?
design-patterns - 何时在企业应用程序中使用至少一次交付语义?
众所周知,通常的 Akka Actor 提供最多一次交付语义。另一方面,akka-persistence 还提供至少一次交付语义,后者在实现时需要更多样板和一些差异(即,处理序列号以避免在确认交付后再次接收或发送)。
现在假设您有一些大型企业应用程序处理大量关键事务(例如,一些银行)。此事务在内部建模为组成系统的参与者之间的特定消息流(可能部署在多台机器中)。
因此,如果上述消息流中单个消息的丢失意味着事务失败或被静默丢弃,这种情况是否会强制实现在所有样板中使用至少一次交付?这不会使代码库维护起来很麻烦吗?如何在代码可维护性和整体系统性能的平衡方面有效地处理这种情况?通常如何以安全的方式最小化使用至少一次交付?
非常感谢。
scala - 使用 Akka 持久性基于每个 Actor 指定存储插件
是否可以为持久参与者手动实例化存储插件(用于日志和快照)?(而不是引用那些通过配置硬编码的那些。)换句话说,而不是覆盖日志和快照插件ID。如手册中的多个持久性插件配置所述,我想这样做:
为了简要解释我的用例,我想编写一个可参数化的插件,它将透明地存储案例类。它将使用适用于任何特定持久性参与者可能处理的案例类的任何读取和写入(来自 Play 框架的 JSON 库)的实现来实例化。
基于前面的示例,它可能看起来像这样(为了清楚起见,使用显式类型):
为我可能想要处理的每种类型编写配置是可行的,但冗长且痛苦。
java - 开始使用 akka 持久性 - 无法重播消息
我正在尝试编写一个非常基本的应用程序,其中消息以更高的速率发送给参与者,参与者以较慢的速率消费消息,然后在一段时间后终止应用程序。当我使用相同的actor系统名称和相同的actor名称以及相同的persistenceId再次运行该应用程序时,我希望看到丢失的消息重播,但它没有发生。
(如果我删除日志和快照位置,它们会在下次运行时使用一些不是 0 字节大小的文件再次创建,所以肯定会发生一些事情。)
Edit1:每当我启动应用程序时,onReceiveRecover 都会收到 RecoveryCompleted 对象。
在 application.conf 中,
scala - 如何调用persist的Seq变体?
persist
Akka Persistence 中的方法对事件序列的预期用途是什么?我看到这里有这样的签名:
但是如果我尝试像下面的例子那样调用它
我将一个事件打印为List(Event(1),Event(2))
. 也就是说,我希望按照给定的顺序分别处理每个事件。但相反,它似乎在以下persist
变体中
类型参数A
被替换为Seq[Event]
而不是被替换Event
并调用序列变体。使用此方法的预期方法是什么?
谢谢。
scala - 如何在 Akka Persistence 中持久化行为?
PersistentActor
对于给定的事件,我有一个可以改变他的状态和/或他的行为的方法。对于持久化状态没有问题,但事实证明我需要将行为也作为状态的一部分持久化,否则在从快照恢复失败的情况下将无法正确初始化,因为快照只携带状态而不是行为。如何正确实现这一目标?
目前,我所做的是保存状态和行为的元组,但我不知道这是否是正确的方法。我愿意接受任何形式的建议和想法。FWIW,这种参与者的用例是作为集群分片的一个条目,我需要每个条目使用 (become/unbecome) 来经历几个状态,并保持条目的状态以及它们所处的行为。非常感谢。
这是说明问题的代码: