2015-10-15 46 views
0

我有一个NServiceBus处理程序,处理Tiff创建事件。通常创建TIFF需要1-5分钟。我在总线配置中使用NHibernatePersistence和SqlServerTransport。NServiceBus处理长时间运行的进程 - 事务

处理程序创建Tiff时,关联的数据库总线表被锁定。所以其他任何事件都会排在后面。

有没有办法允许其他Tiff事件被处理?

+1

你在这个端点托管其他消息messagehandlers呢?在这种情况下,您应该考虑将长时间运行的流程转移到仅用于创建TIFF的单独端点。使用较长的事务超时配置此端点或完全关闭事务。 – janovesk

回答

1

默认情况下,所有数据库操作都是分布式事务的一部分。

您不太清楚要防止的锁定类型。如果这真的是一个表锁,它是如何得到一个表锁?

如果你不想锁,然后

  • 对数据库添加索引,以便查询不表升级锁定
  • 使用较低的事务隔离级别不在的一部分
  • 使用交易通过创建事务范围的分布式事务需要新的事务。这需要幂等处理。

http://docs.particular.net/nservicebus/messaging/transactions#transactions-ambient-transaction-isolation-level

BusConfiguration busConfiguration = new BusConfiguration(); 
busConfiguration.Transactions().IsolationLevel(IsolationLevel.RepeatableRead); 
相关问题