NServicebus:我可以在没有DTC的情况下进行消息回滚吗?

时间:2012-02-27 15:22:40

标签: c# nservicebus

据我所知,NServicebus以这种方式工作 - 它使用DTC将所有数据库事务与消息事务一起包装,如果发生故障,则将所有内容回滚。

现在,我不需要,NServicebus将处理我的数据库事务 - 我会自己处理它们 - 因为我不想使用DTC(nservicebushost和sql server在不同的ec2实例上,我认为我不能在ec2实例上打开RPC端口),但我不希望在处理失败的情况下丢失消息 - 如果发生异常,我想重试并在最大重试后将消息移动到错误队列。

我可以将Nservicebus配置为这样吗?

1 个答案:

答案 0 :(得分:5)

这里的问题与你的ec2实例的崩溃有关。 DTC保证即使在崩溃的情况下也不会丢失消息。

另一个选项是禁止处理程序中的环境事务:

using(TransactionScope scope = new TransactionScope(TransactionScopeOption.Suppress))

在3.0中,我们将介绍一种在NServiceBus中完成此操作的方法。它可能是在您的流畅初始化代码中调用.SuppressDTC()(或类似的东西)。