NServiceBus中Sql Server传输的限制是什么?

NServiceBus中Sql Server传输的限制是什么?,nservicebus,nservicebus4,Nservicebus,Nservicebus4,我正在尝试使用SqlServerTransport而不是MSMQ(我们不希望任何依赖MSMQ或RavenDb)获取VideoStore.NHibernateNServiceBus示例 通过执行以下操作,我已将此示例切换为使用SqlServerTransport而不是MsmqTransport: 为NserviceBus.SqlServer添加适当的NuGet包 向每个app/web.config添加适当的连接字符串 使用这些新设置运行示例时,我注意到NServiceBus.Extension

我正在尝试使用
SqlServerTransport
而不是MSMQ(我们不希望任何依赖MSMQ或RavenDb)获取
VideoStore.NHibernate
NServiceBus示例

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

  • 为NserviceBus.SqlServer添加适当的NuGet包
  • 向每个app/web.config添加适当的连接字符串
使用这些新设置运行示例时,我注意到
NServiceBus.ExtensionMethods
有一个名为
SetMessageHeader
的方法,当我切换到SqlServerTransport时,该方法会抛出一个
InvalidOperationException

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传输不支持的与我们的决策相关的内容

是否有可用的功能/传输矩阵

更新: 好吧,也许是我在这里越狱了。似乎表明SqlServerTransport确实支持消息头和Sagas

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


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

与MSMQ相比,使用SqlServerTransport时没有功能退化。与NHibenrnate持久性的集成工作正常,但需要启用“DistributedTransactions”(默认)。请注意,如果传输和Persience连接字符串相同,它实际上不会升级为DTC(无性能影响)

不支持消息头?你从哪里得到的?@Damien_这个不信的人更新了我的答案。看来我可能被“总线没有实现IManageMessageHeaders”弄糊涂了。我不熟悉
IManageMessageHeaders
,显然谷歌也不熟悉。并且,作为参考,我刚刚从审计表中打开了一条随机消息,并查看了消息头-它有25个,其中5个是我们在消息传递系统中应用的自定义消息头-因此我相当确定SQL Server上支持消息头。这里称为:IManageMessageHeaders接口: