1

我正在阅读文档,以下内容让我感到困惑,因为它在文档顶部说明版本 5 我们无需使用 DTC 即可获得可靠性。

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

我确定这可能是由于我缺乏理解,但 NServiceBus 正在打开它自己的连接和事务与消息处理程序(例如;调用存储库以进行保存)数据库连接分开的事实不会将事务升级为完整的 2PC 使用 DTC?

这是文档:

http://docs.particular.net/nservicebus/outbox/

谢谢!

4

1 回答 1

1

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

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

只需在您的消息处理程序构造函数中获取一个依赖NHibernateStorageContext 项,它就可以让您访问正确的NHibernate.ISessionNHibernate.ITransaction.

于 2015-05-10T17:11:14.017 回答