我是nServiceBus的新手。nServiceBus和IsTransactional(false)
如果總線配置了IsTransactional(true)並且處理程序有很多數據庫交互,那麼asp.net mvc應用程序掛起。
這裏 - http://adamfyles.blogspot.com/2010/08/getting-started-with-nservicebus-part-2_25.html - 我發現了一個祕訣: 「IsTransactional(假) - 我們不希望在交易中掛一個web應用程序了,所以關閉這個功能」
它幫助 - 該頁面很快刷新。另一方面,如果發生異常,則msmq隊列將丟失。
讓我來解釋處理程序做什麼 - 它遍歷一些分貝行,生成一個報告並更新「ReportId」上記錄鍵:
foreach(var row in rows)
{
var reportId = GenerateReport(row);
row.ReportId = reportId;
}
db.Save();
正如我所說的,我是新來nServiceBus 。我需要使用佐賀嗎?我不明白傳奇的。或者,也許我可以這樣做:
foreach(var row in rows)
{
_bus.Send(new GenerateReportMessage{Id = row.Id});
}
並讓處理程序生成報告並更新行?我如何知道所有記錄都已更新?在這種情況下,Web應用程序是否會掛起「IsTransactional(true)」? (我懷疑是)
我的問題:
我應該知道,當我使用 'IsTransactional(假)' 的?
更新大量記錄的最佳方法是什麼?只需在循環中更新它們?我不希望網絡應用程序掛起。
編輯
順便說一句,這個代碼似乎沒有掛Web應用程序,並將其與IsTransactional(真)的作品。
這是一個很好的方法嗎?
using (new TransactionScope(TransactionScopeOption.Suppress))
{
foreach(var row in rows.Where(x => x.ReportId != null))
{
var reportId = GenerateReport(row);
row.ReportId = reportId;
}
db.Save();
}
偏離主題但Udi Dahan在dnrTV上做了一個關於NServiceBus的討論 - http://www.dnrtv.com/default.aspx?showNum=199 – Phill