问题标签 [akka.net-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.

0 投票
1 回答
299 浏览

akka.net - Akka.net 持久化从某个序列号删除消息

有没有办法在某个序列号之后删除消息Akka.net?我知道DeleteMessages(seqNumber)删除某个序列号之前的所有消息,有没有办法在 a 之后删除seqNumber?主要目标是恢复到以前的状态(也许这些消息是错误创建的)。

显然可以手动编辑数据库(或将这些事件的 is_deleted 设置为 true),但我不确定这是否是个好主意。

谢谢

0 投票
0 回答
224 浏览

c# - Akka.net 期刊阅读器丢失事件

在我们的应用程序中,我们使用带有事件溯源的 Akka.net。持久参与者将他们的事件保存在 SQL Server 数据库中。我们还有视图参与者,它们订阅这些事件,使用日志阅读器/持久性查询来创建物化视图。我们在数据库中有一个表,每个视图参与者都有一行。此行包含视图参与者的名称和最后处理的事件的偏移量。乍一看,这工作顺利。然而,有时,当我们运行导致数千个事件的测试时,期刊阅读器会丢失一些事件。

View Actor 是一个 ReceiveActor。启动时,它从数据库中检索最后处理的事件偏移量(从参与者的构造函数中调用)。偏移量在 OffsetMessage 中通过管道传递给 self。在接收到 OffsetMessage 时,视图 Actor 会初始化日志阅读器。在接收事件时(在 EventEnvelope 消息中),视图会更新。

从日志阅读器运行的操作首先将一行写入日志。该行包含事件偏移量。EventEnvelope 接收处理程序还将一行写入日志。该行还包含事件偏移量。

我们有一个测试导致 9635 事件插入到日志中。有时,日志阅读器和 EventEnvelope 接收处理程序记录的事件少于 9635 个。他们都记录了相同的数字,所以期刊读者似乎错过了这些事件。日志中丢失的事件对应于视图中的丢失项。我们在一个空数据库上运行测试。日志记录处于调试级别,不显示异常。丢失的事件(我们已经看到了 1 到 4 的数字)可以是第一个、中间或最后一个事件。每次这都不一样。

到目前为止,我们不知道是什么导致了这个问题,或者如何解决它。

以下是我们的代码片段。视图 Actor 都继承自一个基类:ViewActorBase。

我们的代码或架构有问题吗?有更好的解决方案吗?

附加信息 我们已经使用 SQL Server 探查器运行了一些测试来监视对数据库的查询。

对事件日志执行查询,要求 100 个事件,从偏移量 204743 开始。结果包含 61 行。

我们将下一个查询扩展为从 204804 (204743 + 61) 开始。但是,它从 204810 开始。为什么它会跳过(或丢失)6 个事件?

0 投票
0 回答
85 浏览

akka.net - 有条件地改变 Akka.Persistence 恢复对象

我正在尝试有条件地更改演员的恢复对象。当一个actor启动并且没有快照或事件被持久化时,我重新启动这个actor。重新启动后,我想更改Recovery对象。这就是我目前设置演员的方式:

PostRestart()方法中,我有:

但是,当再次执行恢复过程时,它仍在应用快照。如果我将 的值更改_recovery为忽略构造函数中的快照,它将按预期工作。但是,将其设置为 时PostRestart(),它会被忽略。

有条件地设置Recovery属性的最佳方法是什么?我只想在重新启动演员时设置它,因为EmptyJournalException.

0 投票
1 回答
123 浏览

akka.net - 默认情况下,Akka.net 将其消息存储在哪里?

我已经从github下载了一个示例代码并运行 AtLeastOnceDelivery.sln 每次新运行它都会发送消息。如果我更改消息命名空间,它会显示以

如果我可以清除持久性,希望它会接受然后更改命名空间并重新启动消息传递 ID。

0 投票
2 回答
430 浏览

akka.net - 如果参与者进程重新启动 - Akka.NET,如何确保邮箱消息不会丢失?

我已经阅读了 Akka.NET 的在线文档。

我看到持久性插件可以使用事件源模式存储参与者的状态。

但我没有找到任何关于邮箱中邮件的具体信息。

当一个进程死亡或重启时,actor的邮箱恢复消息?

0 投票
1 回答
106 浏览

akka.net - 找不到方法:Akka.Pattern.CircuitBreaker.Create

当我尝试使用 SQL Server 持久性创建持久性 Actor 时,出现上述错误。

编辑:当我克隆存储库 akka 和 akka 持久性 sql 服务器并附加然后使用 nuget 包按预期工作时,这很奇怪。我正在使用以下版本: "Akka" Version="1.4.11" "Akka.Persistence.SqlServer" Version="1.4.10"

}

我的协调员正在尝试为每个消息 ID 创建演员,但失败并出现错误:

创建具有 1 个参数的 Akka.Persistence.SqlServer.Journal.SqlServerJournal 类型的参与者实例时出错:(类:“Akka.Persistence.SqlServer.Journal.SqlServerJournal,Akka.Persistence.SqlServer”插件调度程序:akka.actor.default-调度程序连接字符串:“xyz”连接超时:30s 模式名称:dbo 表名称:EventJournal 自动初始化:时间戳提供者:“Akka.Persistence.Sql.Common.Journal.DefaultTimestampProvider, Akka.Persistence.Sql .Common" 元数据表名:元数据顺序访问:on ) 原因:: Akka.Actor.ActorInitializationException: 创建期间出现异常 ---> System.TypeLoadException: 创建 Akka.Persistence.SqlServer.Journal 类型的 Actor 实例时出错.SqlServerJournal 带 1 个参数:(类:“Akka.Persistence.SqlServer.Journal.SqlServerJournal,Akka。Persistence.SqlServer”插件调度程序:akka.actor.default-dispatcher 连接字符串:“xyz”连接超时:30 秒模式名称:dbo 表名称:EventJournal 自动初始化:时间戳提供程序:“Akka.Persistence .Sql.Common.Journal.DefaultTimestampProvider, Akka.Persistence.Sql.Common" 元数据表名:元数据顺序访问:on ) ---> System.Reflection.TargetInvocationException:调用目标已抛出异常---> System.MissingMethodException: Method not found: 'Void Akka.Pattern.CircuitBreaker..ctor(Int32, System.TimeSpan, System.TimeSpan)'. at Akka.Persistence.Journal.AsyncWriteJournal..ctor() at Akka.Persistence.Sql.Common.Journal.SqlJournal..ctor(Config journalConfig) 在 Akka.Persistence.SqlServer.Journal.SqlServerJournal..ctor(Config journalConfig)ctor(配置日志配置)

0 投票
1 回答
703 浏览

akka.net - 当 CPU 处于高压状态时,Akka.NET 具有持久性丢弃消息?

我对我的 PoC 进行了一些性能测试。我看到的是我的演员没有收到发送给他的所有消息,并且性能非常低。我向我的应用程序发送了大约 150k 条消息,这导致我的处理器达到 100% 的利用率峰值。但是当我停止发送请求时,2/3 的消息没有传递给参与者。以下是来自应用洞察的简单指标:

发送的请求数

收到的消息数

为了证明我在 mongo 中持久化的事件数量与我的演员收到的消息几乎相同。

蒙哥

其次,处理消息的性能非常令人失望。我每秒收到大约 300 条消息。 毫秒/秒

我知道默认情况下 Akka.NET 消息传递最多一次,但我没有收到任何错误说该消息被丢弃。

这是代码:集群分片注册:

控制器:

演员:

消息路由器。

akka.conf

0 投票
1 回答
26 浏览

akka.net - 持续演员在什么时候脱水/终止?

是否有ReceivePersistentActor生命周期的文档?我对持久演员被杀死/停止/脱水以为其他演员分配资源的情况感兴趣。我们的应用程序创建了很多持久的参与者,我看到有些是Terminated。是否存在持久性参与者在终止之前必须“不活动”的时间范围?还考虑了哪些其他条件?

0 投票
1 回答
50 浏览

akka.net - 为永久终止的演员清理 EntityStoppedManifest 日记条目的最佳实践?

在我们的参与者系统中,使用分片和持久性,我们的一个实现的具体实例ReceivePersistentActor一旦被终止(钝化)就不会被重新使用,因为它们代表由为每个新会话生成的 GUID 标识的客户端会话。

当会话结束时,ReceivePersistentActor负责清理它自己的持久性数据并调用DeleteSnapshotsand DeleteMessages,它工作正常。一旦处理了这些调用,actor 将Context.Parent.Tell(new Passivate(PoisonPill.Instance));终止。之后,事件日志仍将包含一个EntityStoppedManifest条目 ( "CD"),因为这是通过Passivate消息生成的。随着时间的推移,这将导致许多"CD"条目留在事件日志中。

是否有清理此类残留条目的推荐方法?
也许是一个单独的看门人演员手动清理这些条目?
或者这甚至是我们的设计缺陷?