2015-10-15 56 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); 
相關問題