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

本文关键字:消息 情况下 我可以 DTC NServicebus | 更新日期: 2023-09-27 18:25:52

据我所知,NServicebus是这样工作的——它使用DTC将所有数据库事务与消息事务打包在一起,如果失败,则回滚所有事务。

现在,我不需要NServicebus来处理我的数据库事务——我会自己处理它们——因为我不想使用DTC(nserviebushost和sqlserver在单独的ec2实例上,我认为我不能在ec2实例中打开RPC端口),但我不希望丢失消息,以防处理失败——以防出现异常,我想让重试和最大重试后的消息移动到错误队列。

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

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

这里的问题与ec2实例的崩溃有关。DTC保证即使在发生故障时也不会丢失信息。

另一种选择是在处理程序中抑制环境事务:

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

在3.0中,我们将介绍一种在NServiceBus中实现这一功能的方法。它可能是对流畅初始化代码中的.SuppressDTC()(或类似的东西)的调用。