JOliver EventStore 调度标志未设置,事件在每次重新启动时重播



我正在使用 EventStore,事情似乎正在工作,事件由我的内存中代理存储和调度,事件由我的读取模型处理。 但是由于某种原因,EventStore 提交表中的"已调度"标志未设置,因此每次重新启动应用程序时,它都会重播所有事件。 我正在使用SQL Server 2012作为存储。 未发生任何错误。 知道为什么这个标志不会被设置吗?

我的代码:

   private static IStoreEvents BuildEventStore(IBroker broker)
    {
        return Wireup.Init()
            .UsingSqlPersistence(Constants.EventStoreConnectionStringName)
            .InitializeStorageEngine()
            .UsingJsonSerialization()
            .Compress()
            .UsingAsynchronousDispatchScheduler()
            .DispatchTo(new DelegateMessageDispatcher(c => DispatchCommit(broker, c)))
            .Build();
    }
    private static void DispatchCommit(IBroker broker, Commit commit)
    {
        foreach (var @event in commit.Events)
        { 
            if(!(@event.Body is IDomainEvent))
            {
                throw new InvalidOperationException("An event was published that is not an IDomainEvent: " + @event.Body.GetType());
            }
            broker.Publish((IDomainEvent)@event.Body);
        }
    }
调度

程序中UsingAsynchronousDispatchScheduler电线,调度程序在处理的主线之外执行自己的操作。例如,如果它在写入时出现问题,则命令处理线程不会听到它。

使生活更简单的一种方法是将其更改为同步,以便您的命令处理链能够听到异常(请记住,调度异常不会回滚命令已处理并且事件现已发生的事实)。

但实际上,您需要 USL 查看UsingAsynchronousDispatchScheduler接线的处理器会报告问题,以便您的监控可以发现问题。

相关内容

  • 没有找到相关文章

最新更新