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

本文关键字:进程 事务 运行 处理 长时间 NServiceBus | 更新日期: 2023-09-27 18:17:45

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

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

是否有一种方法允许其他Tiff事件被处理?

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

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

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

如果你不想要锁,那么

  • 在数据库上添加索引,这样查询就不会在表锁中升级
  • 使用较低的事务隔离级别
  • 使用不属于分布式事务的事务,创建一个事务作用域。这需要幂等处理。

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

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