【发布时间】:2014-09-22 14:59:38
【问题描述】:
我在特定端点中有几个消息处理程序,它们针对 SQL Azure 数据库执行工作(目前仍在使用本地 SQL 2012 实例)。我有一个发布 2 个事件的命令处理程序,分别称为 X 和 Y。在同一个端点中,我有一个 X 订阅者和一个 Y 订阅者。这两个订阅者在内部使用相同的数据访问组件,称为 Z。注入是按调用配置的,而不是共享的。
组件 Z 在幕后使用 Entity Framework 6。我遇到的问题是,仅打开数据库就会引发 SqlException 并抱怨 MSDTC 升级。
我已将处理程序暂时包装在 TransactionScope.Suppress 中,这已经停止了错误,但我相信我遗漏了一些更基本的东西。
将端点配置为非事务性是否很简单?我原以为这会起作用,因为我已配置为使用 Azure 服务总线作为传输机制。如果我这样做,如果在消息处理程序中引发异常,NServiceBus 仍会重试吗? (直到 SLR 限制——不是问题的一部分,我也理解幂等性问题)。
【问题讨论】:
-
您是使用 SQL Server 作为 NServiceBus 的传输还是仅仅作为数据存储?至于 Azure 服务总线传输 - NSB 将像往常一样使用 FLR(和 SLR,如果已配置)重试异常。
-
它看起来像一个配置问题,但我很难理解你的设置(你使用什么 NServiceBus 传输?)
-
SQL Server 仅用于数据存储。我使用 Azure 服务总线作为传输。我还读到如果我将其设为非事务性,我将不会获得 FLR 或 SLR 重试?对吗?
标签: azure transactions nservicebus nservicebus4