NServiceBus处理长时间运行的进程 - Transaction

时间:2015-10-15 09:12:15

标签: c# nhibernate nservicebus

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

当Handler创建Tiff时,关联的数据库总线表被锁定。所以其他任何事件都有效地排在后面。

有没有办法让其他Tiff事件得到处理?

1 个答案:

答案 0 :(得分:1)

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

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

如果你不想锁定那么

  • 在数据库上添加索引,以便查询不会在表锁中升级
  • 使用较低的事务隔离级别
  • 通过使用requires new创建事务范围来使用不属于分布式事务的事务。这需要进行幂等处理。

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

BusConfiguration busConfiguration = new BusConfiguration();
busConfiguration.Transactions().IsolationLevel(IsolationLevel.RepeatableRead);