NServiceBus不同数据库上的SQL Server传输和SQL持久性
问题描述:
我试图运行一个使用SQL Server传输和SQL持久性的NServiceBus主机应用程序。当我将transport和persistence连接字符串都指向同一个数据库时,一切正常。然而,当我指出他们单独的数据库,在收到了第一条消息,抛出该异常的程序崩溃:System.Data.SqlClient.SqlException (0x80131904): Invalid object name 'persistence.MyService_MySaga'.
NServiceBus不同数据库上的SQL Server传输和SQL持久性
这里是我的端点配置:
var persistenceConnection = @"Data Source=.\SqlExpress;Database=MyServicePersistence;Integrated Security=True;Max Pool Size=100;";
var transportConnection = @"Data Source=.\SqlExpress;Database=MyServiceTransport;Integrated Security=True;Max Pool Size=100;";
var endpointConfiguration = new EndpointConfiguration("MyService");
endpointConfiguration.SendFailedMessagesTo("error");
endpointConfiguration.AuditProcessedMessagesTo("audit");
endpointConfiguration.EnableInstallers();
var transport = endpointConfiguration.UseTransport<SqlServerTransport>();
transport.ConnectionString(transportConnection);
transport.UseSchemaForQueue("error", "dbo");
transport.UseSchemaForQueue("audit", "dbo");
transport.Transactions(TransportTransactionMode.SendsAtomicWithReceive);
var persistence = endpointConfiguration.UsePersistence<SqlPersistence>();
persistence.SqlVariant(SqlVariant.MsSqlServer);
persistence.ConnectionBuilder(() => new SqlConnection(persistenceConnection));
persistence.Schema("persistence");
var subscriptions = persistence.SubscriptionSettings();
subscriptions.CacheFor(TimeSpan.FromMinutes(1));
潜在值得注意:我可以防止异常如果我将TransportTransactionMode
从SendsAtomicWithReceive
更改为None
就会被抛出。但我不想这样做,因为它会导致所有失败的消息直接转到错误队列,绕过所有重试。
答
其实,我刚刚发现我们团队中的其他人已经与来自特定人(西蒙我相信?)的其他人联系过这个问题。就紧急情况而言,我不会说因为有解决方法而非常紧迫。但是,我们的情况并不完全需要解决方法。 – RobotJones
我明白了,我会让你更新! – wlabaj