根据此,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,它首先向 Firebird 写入内容,然后写入 RavenDB。Firebird 和 RavenDB 都能够参与分布式事务。但它们在 Rebus 创建的 TransactionScope 中使用。
我是否必须在 EventHandler 中创建一个带有“Require New”的新嵌套 TransactionScope,以便 Firebird 和 RavenDB 通过 DTC 一起提交。或者我是否必须为 Rebus 执行 DTC 才能使其正常工作。
作为替代方案,我可能只需要按照 Rebus wiki 中的建议进行每次写入 IdemPotent。
我想这个问题比 Rebus 更笼统。当某些连接允许而某些连接不允许时,这实际上是关于 TransactionScope 的行为和对 DTC 的提升。