3

我在 NServiceBus 中使用 Distributor,但我对 DTC 的问题一无所知。在跨进程做事情之前,我只使用过一次 DTC,也许两次,而不是很多,所以我对整个 DTC 概念非常陌生。

Question:
To ensure durable messaging with NSB, is it absolutely necessary to use DTC's?

我问的原因是我希望 NSB 能够检测到处理程序中的任何异常,因此通过不从队列中删除消息来对错误做出反应。因此不需要 DTC。这当然意味着处理程序中的任何数据库或外部服务访问都需要程序员执行她/他自己的回滚等。因此,DTC 似乎确实是最好的方法。所以我完全支持 DTC(如果我理解正确的话),因为从我的角度来看,它们确保消息永远不会从队列中丢失,并且只要处理程序正确实施并且让其他外部服务参与 DTC,消息处理就永远不会损坏.

但我不确定,特别是因为服务器维护团队中一位受人尊敬的人使用了“DTC's will cause you a world of pain!”这句话。当我提出由他在数据库服务器上激活 DTC 的想法时...

对 DTC 和 NSB 有很好理解的人可以帮我澄清一下我是否完全不了解我对 DTC 的理解,以及我是否完全错过了 DTC 的一些大陷阱?

亲切的问候

4

1 回答 1

3

NServiceBus 分发器和在 NServiceBus 中使用 DTC 没有任何关系。无论您是否使用分销商,NServiceBus 都将使用 DTC。

NSB 分发器工作人员(甚至在不使用 NSB 分发器时单个盒子上的单个工作线程)不会在分布式事务中相互招募。让我重申一下,您永远不会在单个 DTC 事务中看到两个 NSB 工作线程。每个工作线程针对本地队列启动事务,然后将(可能是远程)数据库添加到事务(使其分布式)

这里有一个很好的概念说明

我不认为你错过了任何大的陷阱。我只是将这两个概念解耦,NSB 分发器和 NSB 如何使用分布式事务

于 2013-03-09T03:29:03.713 回答