NServiceBus 处理长 运行 进程 - 事务

NServiceBus handling long running process - Transaction

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

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

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

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

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

如果你不想锁定那么

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

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

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