首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NES (.NET事件源)事务失败?

NES (.NET事件源)事务失败?
EN

Stack Overflow用户
提问于 2011-08-24 09:49:22
回答 2查看 499关注 0票数 1

我正在尝试NES0.3 (https://github.com/elliotritchie/NES),但在理解所发生的事情上有一些困难。在运行示例应用程序时,我已经将EventStore配置更改为server,并在执行离开SendMessageCommandHandler.Handle()之前插入了一个异常。

然后我启动了处理程序和网站。我创建了一个运行良好的新用户。在我的EventStore表中注册了一个事件。然后我试着传达一个信息。这是由于我的异常而失败的。因此,由于总线的事务性质,没有分派任何NServiceBus事件。但是在EventStore中,事件被注册并使用dispatched=1标记。

我遗漏了什么?当然,当它没有被NServiceBus发送的时候,它不应该被注册为已被发送?错误队列中唯一的消息是"SendMessageCommand“。这可能是我的理解是错误的,所以我想在向作者报告这个问题之前,我应该在这里问一问。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-08-28 13:43:55

0.3.0.1版本的NES http://nuget.org/List/Packages/NES现在只有在所有处理程序成功运行之后才会提交任何更改。

不过,您仍然应该考虑自己管理消息。你可以有几种方法:

默认情况下,当向数据库提交更改时,EventStore将取消任何环境事务。但是,如果使用的是Server或Raven,则可以将EventStore的TransactionScopeOption更改为Required,这将确保使用MSDTC将事务分发,并为您处理所有事务。

使用2PC的另一个替代方法是保存所有接收到的消息的日志,并使用它来接受/拒绝特定消息的处理。这个方法的一个例子可以在这里找到:http://blog.jonathanoliver.com/2010/04/extending-nservicebus-avoiding-two-phase-commits/

票数 1
EN

Stack Overflow用户

发布于 2011-08-25 19:49:32

在引擎盖下,NES使用EventStore项目。根据设计,在调用MarkAsDispatched()之前,不会考虑分派每个提交。因此,我推测某种东西在一个意想不到的位置调用该方法。

首先,您是否有一个运行EventStore的实例。确保您没有运行两个实例。除此之外,我建议逐步遍历处理程序,以确定提交在哪一点被标记为已分派。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7173423

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档