Akka.net | MongoDB 只加载一个事件

Akka.net | MongoDB only loads one event

我目前正在与 akka 合作开展一个新项目。但是现在我遇到了一个问题。

我向我的项目添加了一个 mongo 数据库并设置了日志和快照存储。我可以持久化事件,事件将存储在数据库中。效果很好。

但是当我重新启动应用程序并且 actor 开始恢复事件时,actor 只恢复了第一个事件。 Recovery upper SequenceNr Limit 似乎设置为 1,但我已经检查过了。 在第一个事件恢复后,actor 收到消息 RecoveryCompleted 并且恢复过程完成。

恢复方法

private void recovers()
{
    Recover<TenantCreated>(evt =>
    {
        applyEvent(evt);
        Context.System.EventStream.Publish(evt);
    
    });

    Recover<TenantDeleted>(evt =>
    {
        applyEvent(evt);
        Context.System.EventStream.Publish(evt);
    });

    Recover<SnapshotOffer>(snapshot =>
    {
        this.state = (TenantCollection)snapshot.Snapshot;
    });

    Recover<RecoveryCompleted>(msg =>
    {
    });
}

一种持久化事件的方法

Command<CreateTenant>(command =>
{
    Persist(new TenantCreated(command.Id, command.UserId, command.Name, new Guid(command.Id).ToString("N")), evt =>
    {
        var newTenant = applyEvent(evt);

        newTenant.Tell(command);

        persistAndPublishEvent(evt);
    });
});

我的akka​​配置。 connectionString 将加载后备。有了这个,我可以将 connectionString 设置为环境变量。

persistence {
    journal {
        plugin = "akka.persistence.journal.mongodb"
        mongodb {
            class = "Akka.Persistence.MongoDb.Journal.MongoDbJournal, Akka.Persistence.MongoDb"
            collection = "EventJournal"
            plugin-dispatcher = "akka.actor.default-dispatcher"
        }
    }

    snapshot-store {
        plugin = "akka.persistence.snapshot-store.mongodb"
        mongodb {
            class = "Akka.Persistence.MongoDb.Snapshot.MongoDbSnapshotStore, Akka.Persistence.MongoDb"
            collection = "SnapshotStore"
            plugin-dispatcher = "akka.actor.default-dispatcher"
        }
    }
}

有什么问题?

有没有人遇到同样的问题?

我发现了问题。

我将我的 nuget 包 akka.persistence.mongoDb 从 1.4.19 降级到 1.4.14 然后它工作了。 在 1.4.19 中,akka 只会创建一个 EventJournal 集合。缺少元数据集合。

对于 4.1.14,akka 还会创建元数据集合。

也许我使用 MongoDb 不正确,但这对我有用。

是的,看起来这毕竟是一个错误 - 删除元数据 table 暴露了它。

这是因为默认情况下我们不对集合应用索引(从表面上看,从来没有——我们错过了,因为我们的测试套件中的配置不同:) https://github.com/akkadotnet/Akka.Persistence.MongoDB/blob/552a29eed4c839fe4f91fceeb70bb29eb17d1315/src/Akka.Persistence.MongoDb/reference.conf#L11

所以这真的很有帮助 - 事实证明我们的大用户从来没有遇到过这个问题,因为他们一直 运行 在他们的配置中使用 auto-initialize=on。您受到默认设置不同的影响。

https://github.com/akkadotnet/Akka.Persistence.MongoDB/releases/tag/1.4.21 - 我们发布了 Akka.NET v1.4.21 解决了这个问题。