Nservicebus N服务总线-消息报告为;失败的最大次数“;,虽然我可以看到它正在运行,并且没有抛出异常

Nservicebus N服务总线-消息报告为;失败的最大次数“;,虽然我可以看到它正在运行,并且没有抛出异常,nservicebus,Nservicebus,在调试启用NServiceBus的应用程序时,控制台中会报告某些消息“失败的最大次数” 当我将调试器附加到处理程序时,一切都如我所期望的那样工作。处理程序不会抛出异常 但是,处理程序确实创建了一个SQLTransaction,并且有意将该事务回滚,作为某些消息场景处理的一部分。似乎是让事务回滚的消息被报告为失败的消息 SQLTransactions和NServiceBus之间是否存在某种关系,从而导致NServiceBus识别已发生回滚 我知道这听起来不太可能,但我想不出还有什么其他原因可能会导

在调试启用NServiceBus的应用程序时,控制台中会报告某些消息“失败的最大次数”

当我将调试器附加到处理程序时,一切都如我所期望的那样工作。处理程序不会抛出异常

但是,处理程序确实创建了一个SQLTransaction,并且有意将该事务回滚,作为某些消息场景处理的一部分。似乎是让事务回滚的消息被报告为失败的消息

SQLTransactions和NServiceBus之间是否存在某种关系,从而导致NServiceBus识别已发生回滚

我知道这听起来不太可能,但我想不出还有什么其他原因可能会导致消息在此阶段失败?

我的猜测(没有看到异常错误消息)是您的错误来自手动处理SQL事务

如果使用默认设置运行NServiceBus,则消息处理发生在.NET
TransactionScope
内部,也称为“环境事务”。您的SQL事务很可能被登记到环境事务中,因此手动回滚事务将导致错误

“惯用的NServiceBus方式”(至少你们中的一个对环境事务和DTC没有意见)是让NServiceBus完成所有事务处理。因此,您应该让处理程序A)完成其工作,或者B)抛出异常

在这两种情况下,环境事务将确保根据A或B提交/回滚任何登记的事务