我试图让VideoStore.NHibernate
NServiceBus 示例(来自Github)使用SqlServerTransport
而不是 MSMQ 工作(我们不想依赖 MSMQ 或 RavenDb)。
通过执行以下操作,我已将此示例切换为使用 SqlServerTransport 而不是 MsmqTransport:
- 为 NserviceBus.SqlServer 添加适当的 NuGet 包
- 将适当的连接字符串添加到每个 app/web.config
当我使用这些新设置运行示例时,我注意到NServiceBus.ExtensionMethods
静态类有一个调用的方法,当我切换到 SqlServerTransport 时SetMessageHeader
会抛出一个: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 传输不支持与我们的决定相关的其他任何内容吗?
是否有可用的功能/传输矩阵?
更新:
好吧,也许我在这里跳过了枪。https://github.com/Particular/NServiceBus.SqlServer.Samples似乎暗示 SqlServerTransport 确实支持消息头和 Sagas。
更新二
看来您对持久性 (NHibernatePeristence) 和传输 (SqlServerTransport) 使用相同的数据库会导致问题。为每个角色使用单独的数据库似乎已经解决了这个问题。
我仍然想知道在功能支持方面使用 SqlServerTransport 是否有任何缺点?