NServiceBus SQL 服务器传输和 SQL 在不同数据库上的持久化
NServiceBus SQL Server Transport and SQL Persistence on different databases
我正在尝试 运行 使用 SQL 服务器传输和 SQL 持久性的 NServiceBus 主机应用程序。当我将传输连接字符串和持久连接字符串指向同一个数据库时,一切正常。但是,当我将它们指向单独的数据库时,程序在收到第一条消息时崩溃,抛出此异常:System.Data.SqlClient.SqlException (0x80131904): Invalid object name 'persistence.MyService_MySaga'.
这是我的端点配置:
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
,我可以防止抛出异常。但是我不想这样做,因为它会导致所有失败的消息直接进入错误队列,绕过所有重试。
您似乎在我们的实施中发现了一个错误,感谢您提出它。
我在 SQL 持久性存储库中创建了一个问题,您可以跟踪它 there。
我们很可能会在即将推出的新专业中发布修复程序,希望对您有用。你能指出问题的紧急程度吗?
我正在尝试 运行 使用 SQL 服务器传输和 SQL 持久性的 NServiceBus 主机应用程序。当我将传输连接字符串和持久连接字符串指向同一个数据库时,一切正常。但是,当我将它们指向单独的数据库时,程序在收到第一条消息时崩溃,抛出此异常:System.Data.SqlClient.SqlException (0x80131904): Invalid object name 'persistence.MyService_MySaga'.
这是我的端点配置:
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
,我可以防止抛出异常。但是我不想这样做,因为它会导致所有失败的消息直接进入错误队列,绕过所有重试。
您似乎在我们的实施中发现了一个错误,感谢您提出它。
我在 SQL 持久性存储库中创建了一个问题,您可以跟踪它 there。
我们很可能会在即将推出的新专业中发布修复程序,希望对您有用。你能指出问题的紧急程度吗?