问题标签 [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.
akka.net - Akka.net 持久化从某个序列号删除消息
有没有办法在某个序列号之后删除消息Akka.net
?我知道DeleteMessages(seqNumber)
删除某个序列号之前的所有消息,有没有办法在 a 之后删除seqNumber
?主要目标是恢复到以前的状态(也许这些消息是错误创建的)。
显然可以手动编辑数据库(或将这些事件的 is_deleted 设置为 true),但我不确定这是否是个好主意。
谢谢
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 个事件?
akka.net - 有条件地改变 Akka.Persistence 恢复对象
我正在尝试有条件地更改演员的恢复对象。当一个actor启动并且没有快照或事件被持久化时,我重新启动这个actor。重新启动后,我想更改Recovery
对象。这就是我目前设置演员的方式:
在PostRestart()
方法中,我有:
但是,当再次执行恢复过程时,它仍在应用快照。如果我将 的值更改_recovery
为忽略构造函数中的快照,它将按预期工作。但是,将其设置为 时PostRestart()
,它会被忽略。
有条件地设置Recovery
属性的最佳方法是什么?我只想在重新启动演员时设置它,因为EmptyJournalException
.
akka.net - 默认情况下,Akka.net 将其消息存储在哪里?
我已经从github下载了一个示例代码并运行 AtLeastOnceDelivery.sln 每次新运行它都会发送消息。如果我更改消息命名空间,它会显示以
如果我可以清除持久性,希望它会接受然后更改命名空间并重新启动消息传递 ID。
akka.net - 如果参与者进程重新启动 - Akka.NET,如何确保邮箱消息不会丢失?
我已经阅读了 Akka.NET 的在线文档。
我看到持久性插件可以使用事件源模式存储参与者的状态。
但我没有找到任何关于邮箱中邮件的具体信息。
当一个进程死亡或重启时,actor的邮箱恢复消息?
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(配置日志配置)
akka.net - 持续演员在什么时候脱水/终止?
是否有ReceivePersistentActor生命周期的文档?我对持久演员被杀死/停止/脱水以为其他演员分配资源的情况感兴趣。我们的应用程序创建了很多持久的参与者,我看到有些是Terminated。是否存在持久性参与者在终止之前必须“不活动”的时间范围?还考虑了哪些其他条件?
akka.net - 为永久终止的演员清理 EntityStoppedManifest 日记条目的最佳实践?
在我们的参与者系统中,使用分片和持久性,我们的一个实现的具体实例ReceivePersistentActor
一旦被终止(钝化)就不会被重新使用,因为它们代表由为每个新会话生成的 GUID 标识的客户端会话。
当会话结束时,ReceivePersistentActor
负责清理它自己的持久性数据并调用DeleteSnapshots
and DeleteMessages
,它工作正常。一旦处理了这些调用,actor 将Context.Parent.Tell(new Passivate(PoisonPill.Instance));
终止。之后,事件日志仍将包含一个EntityStoppedManifest
条目 ( "CD"
),因为这是通过Passivate
消息生成的。随着时间的推移,这将导致许多"CD"
条目留在事件日志中。
是否有清理此类残留条目的推荐方法?
也许是一个单独的看门人演员手动清理这些条目?
或者这甚至是我们的设计缺陷?