Nservicebus N维修总线5是否未涉及DTC?

Nservicebus N维修总线5是否未涉及DTC?,nservicebus,msdtc,nservicebus5,Nservicebus,Msdtc,Nservicebus5,我正在阅读文档,以下内容让我感到困惑,因为在文档顶部的版本5中,我们在不使用DTC的情况下获得了可靠性 这些功能已使用发件箱模式和重复数据消除模式实现。当消息退出队列时,我们检查是否以前处理过它。如果是这样的话,我们将在发件箱中为该消息传递任何消息,但不会再次调用消息处理逻辑如果消息之前未被处理,则调用常规处理程序逻辑,将所有传出消息存储在持久存储器中,与用户自己的数据库更改相同的事务中。最后,我们发送所有传出消息并更新重复数据消除存储 我确信这可能是因为我不了解,但NServiceBus正在打

我正在阅读文档,以下内容让我感到困惑,因为在文档顶部的版本5中,我们在不使用DTC的情况下获得了可靠性

这些功能已使用发件箱模式和重复数据消除模式实现。当消息退出队列时,我们检查是否以前处理过它。如果是这样的话,我们将在发件箱中为该消息传递任何消息,但不会再次调用消息处理逻辑如果消息之前未被处理,则调用常规处理程序逻辑,将所有传出消息存储在持久存储器中,与用户自己的数据库更改相同的事务中。最后,我们发送所有传出消息并更新重复数据消除存储

我确信这可能是因为我不了解,但NServiceBus正在打开自己的连接和事务,这不是与消息处理程序(例如,调用存储库保存)数据库连接分离的事实吗?使用DTC,事务将升级到完整的2PC

以下是文件:


谢谢

是的,会的。这就是为什么它会与你分享它们

NServiceBus在消息处理程序中向您公开这些内容,以便您可以重用它们并避免升级

只需依赖于
NHibernateStorageContext

在消息处理程序构造函数中,它允许您访问正确的
NHibernate.ISession
NHibernate.ITransaction

奇怪,文档链接没有提到this@Sarmaad有了EF 6,您可以重用现有事务,因此您应该能够利用hibernates ITransaction。我相信这就是Janovesk所说的我们需要做的。