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接口: