nservicebus和eventstore

nservicebus和eventstore,nservicebus,neventstore,Nservicebus,Neventstore,我想知道以前是否有人遇到过这种情况: 我处理命令,并在处理程序中,将事件保存到eventstore(joliver)。 在分派之后,同一命令的处理程序将再次被处理。 我知道它是同一个命令,因为命令上的guid是相同的 五次尝试后,nservicebus表示由于重试次数最多,该命令失败。 很明显,命令失败了,但我没有得到任何失败的迹象。 我已经将调度程序的内容放在一个try-catch中,但是没有捕获到错误。代码退出调度程序后,事件处理程序将始终激发,好像发生了什么错误 通过跟踪代码,事件被保存到

我想知道以前是否有人遇到过这种情况:

我处理命令,并在处理程序中,将事件保存到eventstore(joliver)。
在分派之后,同一命令的处理程序将再次被处理。
我知道它是同一个命令,因为命令上的guid是相同的

五次尝试后,nservicebus表示由于重试次数最多,该命令失败。
很明显,命令失败了,但我没有得到任何失败的迹象。 我已经将调度程序的内容放在一个try-catch中,但是没有捕获到错误。代码退出调度程序后,事件处理程序将始终激发,好像发生了什么错误

通过跟踪代码,事件被保存到数据库(我看到行),dispatcher运行,Dispatched列被设置为true,然后处理程序再次处理命令,过程重复,并将另一行插入到提交表中

有什么会失败呢?我不是在活动商店的某个地方设置了成功标志吗? 如果我将eventstore与nServicebus解耦,两者都将按预期运行,没有重试和失败

调度员:

    public void Dispatch(Commit commit)
    {
        for (var i = 0; i < commit.Events.Count; i++)
        {
            try
            {
                var eventMessage = commit.Events[i];
                var busMessage = (T)eventMessage.Body;
                //bus.Publish(busMessage);

            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
    }
公共无效分派(提交)
{
对于(var i=0;i
Wireup.Init()文件

私有静态iStoreeEvents WireupEventStore()
{
返回Wireup.Init()
.LogToOutputWindow()
.使用SQLPersistence(“事件存储”)
.InitializeStorageEngine()
.UsingBinarySerialization()的用法
//.UsingJsonSerialization()
//.Compress()
//.UsingAsynchronousDispatchScheduler()
//.DispatchTo(新的NServiceBusCommitDispatcher())
.UsingSynchronousDispatchScheduler()
.DispatchTo(新的DelegateMessageDispatcher(DispatchCommit))
.Build();
}

我在save上打开了一个事务作用域,但从未关闭过

    public static void Save(AggregateRoot root)
    {
        // we can call CreateStream(StreamId) if we know there isn't going to be any data.
        // or we can call OpenStream(StreamId, 0, int.MaxValue) to read all commits,
        // if no commits exist then it creates a new stream for us.
        using (var scope = new TransactionScope())
        using (var eventStore = WireupEventStore())
        using (var stream = eventStore.OpenStream(root.Id, 0, int.MaxValue))
        {
            var events = root.GetUncommittedChanges();
            foreach (var e in events)
            {
                stream.Add(new EventMessage { Body = e });
            }

            var guid = Guid.NewGuid();
            stream.CommitChanges(guid);
            root.MarkChangesAsCommitted();

            scope.Complete(); // <-- missing this
        }
    }
公共静态无效保存(AggregateRoot根目录)
{
//如果我们知道不会有任何数据,我们可以调用CreateStream(StreamId)。
//或者我们可以调用OpenStream(StreamId,0,int.MaxValue)来读取所有提交,
//如果不存在提交,那么它将为我们创建一个新的流。
使用(var scope=new TransactionScope())
使用(var eventStore=WireupEventStore())
使用(var stream=eventStore.OpenStream(root.Id,0,int.MaxValue))
{
var events=root.GetUncommittedChanges();
foreach(事件中的var e)
{
Add(新事件消息{Body=e});
}
var guid=guid.NewGuid();
提交更改(guid);
root.markchangesasscommitted();

scope.Complete();//我在保存时打开了一个事务范围,但从未关闭

    public static void Save(AggregateRoot root)
    {
        // we can call CreateStream(StreamId) if we know there isn't going to be any data.
        // or we can call OpenStream(StreamId, 0, int.MaxValue) to read all commits,
        // if no commits exist then it creates a new stream for us.
        using (var scope = new TransactionScope())
        using (var eventStore = WireupEventStore())
        using (var stream = eventStore.OpenStream(root.Id, 0, int.MaxValue))
        {
            var events = root.GetUncommittedChanges();
            foreach (var e in events)
            {
                stream.Add(new EventMessage { Body = e });
            }

            var guid = Guid.NewGuid();
            stream.CommitChanges(guid);
            root.MarkChangesAsCommitted();

            scope.Complete(); // <-- missing this
        }
    }
公共静态无效保存(AggregateRoot根目录)
{
//如果我们知道不会有任何数据,我们可以调用CreateStream(StreamId)。
//或者我们可以调用OpenStream(StreamId,0,int.MaxValue)来读取所有提交,
//如果不存在提交,那么它将为我们创建一个新的流。
使用(var scope=new TransactionScope())
使用(var eventStore=WireupEventStore())
使用(var stream=eventStore.OpenStream(root.Id,0,int.MaxValue))
{
var events=root.GetUncommittedChanges();
foreach(事件中的var e)
{
Add(新事件消息{Body=e});
}
var guid=guid.NewGuid();
提交更改(guid);
root.markchangesasscommitted();

scope.Complete();//对我来说,这听起来像是NSB事务。@Davintroon我同意,但我如何找出这是什么?try-catch实际上没有捕获任何内容,错误日志只表明尝试了重试。对我来说,这听起来像是NSB事务。@Davintroon我同意,但我如何找出这是什么?The try catch实际上并没有捕获任何内容,错误日志只表明尝试了重试。