我正在使用NServiceBus中的分销商,而且我对DTC的问题一直不屑一顾。 我之前只使用了一次DTC一次,也就是两次之前做过程而不是很多,所以我对整个DTC概念非常新手。
Question:
To ensure durable messaging with NSB, is it absolutely necessary to use DTC's?
我问的原因是我希望NSB能够检测到处理程序中的任何异常,因此不会通过从队列中删除消息来对错误做出反应。因此不需要DTC。这当然意味着处理程序中的任何数据库或外部服务访问都需要程序员执行她/他自己的回滚等。因此DTC确实是最好的方法。所以我都是DTC的(如果我理解他们的话),因为他们从我的角度确保消息永远不会从队列中丢失,只要处理程序正确实施并且其他外部服务参与DTC,消息处理将永远不会损坏
但我不确定,特别是因为服务器维护团队中一位受人尊敬的人使用了句子“DTC会让你感到痛苦!”当我想到激活DTC的时候数据库服务器由他...但他还没有提出争论为什么我在DTC的这么多痛苦......:/。
对DTC和NSB有充分了解的人能帮我澄清一下我对DTC的理解是否完全消失,以及DTC是否完全错过了一些重大缺陷?
亲切的问候
答案 0 :(得分:3)
NServiceBus分销商和NServiceBus中DTC的使用彼此之间没有任何关系。无论您是否使用经销商,NServiceBus都将使用DTC。
NSB分发工作者(甚至在不使用NSB分发服务器时,甚至单个工作线上的单个工作线程)也不会在分布式事务中相互争用。让我重申一下,在单个DTC事务中,您永远不会看到两个NSB工作线程。每个工作线程针对本地队列启动一个事务,然后将一个(可能是远程的)数据库添加到事务中(使其分发)
有一个很好的例子概念here
我认为你没有错过任何重大陷阱。我只是解耦两个概念,NSB分销商以及NSB如何使用分布式事务