저는 nServiceBus를 처음 사용합니다.nServiceBus 및 IsTransactional (거짓)
버스가 IsTransactional (true)로 구성되고 처리기가 많은 db 상호 작용을하는 경우 asp.net mvc 응용 프로그램이 중단됩니다. "- 우리가 거래에서 웹 응용 프로그램을 끊고 싶은, 그래서이 전원을 끄지 마십시오 IsTransactional (거짓)"
을 그리고 그것은 도움이 - 페이지는 다음과 같습니다
- - http://adamfyles.blogspot.com/2010/08/getting-started-with-nservicebus-part-2_25.html 나는 팁을 발견 빨리 상쾌하게. 반면에 예외가 발생하면 msmq 대기열이 손실됩니다. 내가 말했듯이
foreach(var row in rows)
{
var reportId = GenerateReport(row);
row.ReportId = reportId;
}
db.Save();
, 나는 nServiceBus에 새로운 해요 : 그것은 어떤 DB 행을 반복 처리하는 보고서를 생성하고 그 기록에 'ReportId'키를 업데이트 -
날 핸들러가 무엇을 설명하게 . 이것을 위해 사가를 사용해야합니까? 아직 사가가 뭔지 몰라. 아니면 다음과 같이 할 수 있습니다.foreach(var row in rows)
{
_bus.Send(new GenerateReportMessage{Id = row.Id});
}
핸들러에서 보고서를 생성하고 행을 업데이트하도록 하시겠습니까? 모든 기록이 갱신되었음을 어떻게 알 수 있습니까? 이 경우 웹 앱도 'IsTransactional (true)'로 전화를 끊습니까?
은 내가 내가 '(false)를 IsTransactional'를 사용하고 경우에주의해야합니다
내 질문 (I 네 의심)?
많은 레코드를 업데이트하는 가장 좋은 방법은 무엇입니까? 루프에서 업데이트 하시겠습니까? 웹 앱이 멈추지 않게하고 싶습니다.
편집, BTW이 코드는 웹 응용 프로그램을 끊지 것, 그것은 (사실) 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은 NServiceBus에 관한 dnrTV에 대한 강연을했습니다 - http://www.dnrtv.com/default.aspx?showNum=199 – Phill