Je suis nouveau sur nServiceBus.nServiceBus et IsTransactional (faux)
Si le bus est configuré avec IsTransactional (true) et que le gestionnaire a beaucoup d'interaction db, l'application asp.net mvc raccroche.
ici - http://adamfyles.blogspot.com/2010/08/getting-started-with-nservicebus-part-2_25.html - J'ai trouvé une astuce: "IsTransactional (false) - nous ne voulons pas bloquer une application web dans les transactions, donc désactiver cette"
et il a aidé - la page est rafraîchissant rapidement. D'un autre côté, si une exception se produit, la file d'attente msmq est perdue.
Laissez-moi vous expliquer ce que le gestionnaire fait - il itère sur certaines lignes de db, génère un rapport et met à jour la clé « reportId » sur ce disque:
foreach(var row in rows)
{
var reportId = GenerateReport(row);
row.ReportId = reportId;
}
db.Save();
Comme je l'ai dit, je suis nouveau nServiceBus . Dois-je utiliser Saga pour ça? Je ne comprends pas encore les saga. Ou peut-être que je peux faire quelque chose comme ceci:
foreach(var row in rows)
{
_bus.Send(new GenerateReportMessage{Id = row.Id});
}
Et laisser le gestionnaire générer le rapport et mettre à jour la ligne? Comment saurai-je que tous les enregistrements ont été mis à jour? L'application web va-t-elle aussi se bloquer avec 'IsTransactional (true)' dans ce cas? (Je pense que oui)
Mes questions:
Que dois-je être au courant lorsque j'utilise 'IsTransactional (false)?
Quelle est la meilleure façon de mettre à jour un grand nombre d'enregistrements? Juste les mettre à jour dans la boucle? Et je ne veux pas que l'application web se bloque.
EDIT
BTW, ce code semble ne pas bloquer l'application Web, et il travaille avec IsTransactional (true).
Est-ce une bonne approche?
using (new TransactionScope(TransactionScopeOption.Suppress))
{
foreach(var row in rows.Where(x => x.ReportId != null))
{
var reportId = GenerateReport(row);
row.ReportId = reportId;
}
db.Save();
}
Hors sujet mais Udi Dahan a fait une présentation sur dnrTV à propos de NServiceBus - http://www.dnrtv.com/default.aspx?showNum=199 – Phill