NServiceBus中Sql Server Transport的限制是什么?

时间:2014-10-13 12:54:12

标签: nservicebus nservicebus4

我正在尝试使用VideoStore.NHibernate而不是MSMQ来获取SqlServerTransport NServiceBus样本(来自Github)(我们不希望依赖于MSMQ和RavenDb)

通过执行以下操作,我已将此示例切换为使用SqlServerTransport而不是MsmqTransport:

  • 为NserviceBus.SqlServer
  • 添加适当的NuGet包
  • 将适当的连接字符串添加到每个app / web.config

当我使用这些新设置运行示例时,我注意到NServiceBus.ExtensionMethods static class有一个名为SetMessageHeader的方法,当我切换到SqlServerTransport时会抛出InvalidOperationException:< / p>

public static void SetMessageHeader(this ISendOnlyBus bus, object msg, string key, string value)
{
    IManageMessageHeaders manageMessageHeaders = bus as IManageMessageHeaders;
    if (manageMessageHeaders == null)
        throw new InvalidOperationException("bus does not implement IManageMessageHeaders");
    manageMessageHeaders.SetHeaderAction(msg, key, value);
}

这是否意味着SqlServerTransport不支持邮件标头?

SQL Server Transport是否还支持与我们的决定相关的其他内容?

是否有功能/传输矩阵?

更新

好吧,也许我已经在这里跳了枪。 https://github.com/Particular/NServiceBus.SqlServer.Samples似乎暗示SqlServerTransport确实支持邮件头和Sagas。

更新II

对于持久性(NHibernatePeristence)和传输(SqlServerTransport),使用相同的数据库似乎会导致问题。为每个角色使用单独的数据库似乎已经解决了问题。

我仍然想知道在功能支持方面使用SqlServerTransport是否有任何缺点?

1 个答案:

答案 0 :(得分:1)

与MSMQ相比,使用SQLServer传输时没有功能降级。与NHibenrnate持久性集成工作正常但需要&#34; DistributedTransactions&#34;启用(默认)。请注意,如果传输和persitence连接字符串相同,它实际上升级到DTC(没有性能损失)