我正在使用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会给你带来巨大的痛苦!”。但他还没有提出关于为什么使用DTC会让我感受到如此多痛苦的论据...
能否有一个对DTC和NSB有很好理解的人帮助我澄清一下我是否完全误解了DTC,以及是否存在我完全忽略的重大缺陷?
此致敬礼