我正在尝试使用VideoStore.NHibernate
而不是MSMQ来获取SqlServerTransport
NServiceBus样本(来自Github)(我们不希望依赖于MSMQ和RavenDb)
通过执行以下操作,我已将此示例切换为使用SqlServerTransport而不是MsmqTransport:
当我使用这些新设置运行示例时,我注意到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。
对于持久性(NHibernatePeristence)和传输(SqlServerTransport),使用相同的数据库似乎会导致问题。为每个角色使用单独的数据库似乎已经解决了问题。
我仍然想知道在功能支持方面使用SqlServerTransport是否有任何缺点?
答案 0 :(得分:1)
与MSMQ相比,使用SQLServer传输时没有功能降级。与NHibenrnate持久性集成工作正常但需要&#34; DistributedTransactions&#34;启用(默认)。请注意,如果传输和persitence连接字符串相同,它实际上不升级到DTC(没有性能损失)