Rebus不支持DTC: https://github.com/rebus-org/Rebus/wiki/Transactions但根据此https://github.com/rebus-org/Rebus/wiki/Automatic-retries-and-error-handling Rebus确实使用TransactionScope。我想这意味着轻量级事务总是被使用,它不能跨越多台机器或连接。
在我的情况下,我想要一个EventHandler,首先写一些东西到火鸟,然后写到RavenDB。Firebird和RavenDB都能够参与分布式事务。但是它们是在Rebus创建的TransactionScope中使用的。
我必须在eventandler中创建一个新的嵌套的TransactionScope,带有"Require new",以便Firebird和RavenDB通过DTC一起提交。或者我必须为Rebus做一个DTC实现才能工作吗?
作为一种替代方法,我可能只需要按照Rebus wiki中建议的那样使每个write都是幂等的。
我想这个问题比关于雷布斯的问题更普遍。它实际上是关于TransactionScope的行为以及当某些连接允许而某些连接不允许时对DTC的提升。
我想你是对的,问题更多的是关于TransactionScope
是如何工作的,以及Firebird和RavenDB能够在多大程度上参与环境事务。
默认情况下,Rebus不处理事务范围内的消息(与您发布此问题时wiki所声明的相反)。
它可以被启用,但是-请查看更新的wiki页面了解如何启用它。
我建议您要么使数据库更新幂等,要么将写操作分成两个单独的步骤,由两个单独的处理程序执行。