/ / Deadlocks beim Ausführen des NServicebus-Dienstes führt zu beschädigten Verbindungen - nhibernate, deadlock, nservicebus

Deadlocks beim Ausführen von NServicebus-Dienst verursacht eine beschädigte Verbindung - Nhibernate, Deadlock, Nservicebus

Wir führen NServiceBus für eine Webanwendung aus, um Situationen zu handhaben, in denen der Benutzer "Batch-Like-Aktionen" ausführt.

Es funktioniert gut, aber bei mäßiger Belastung kommt es zu einigen Deadlocks. Dies ist kein Problem, versuchen Sie es einfach erneut.

Das Problem tritt auf, wenn die nächste Nachricht eingeht und versucht, eine Verbindung zu öffnen. Die Verbindung ist dann "beschädigt".

Wir erhalten den folgenden Fehler: System.Data.SqlClient.SqlException (0x80131904): Die neue Anforderung kann nicht gestartet werden, da sie einen gültigen Transaktionsdeskriptor enthalten sollte

Ich habe das Internet durchsucht und denke, dass unser Problem ein Problem ist NH "Fehler":

Eine Problemumgehung sollte darin bestehen, das Verbindungspooling zu deaktivieren. Aber ich mag das nicht, da die Performance abnehmen wird ..

Wir betreiben NServiceBus 2.6, NHibernate 3.3.

Hat jemand Erfahrung damit? Kann ein Upgrade von NServiceBus helfen?

Antworten:

1 für die Antwort № 1

Ich habe das in der Vergangenheit gesehen, wenn Ihr DesignGarantien, versuchen Sie, die Transaktion in zwei Teile zu zerlegen. Wenn Sie die Nachrichtentransaktion bis zu Ihren Datenbankvorgängen durchlaufen lassen, wirken sich alle Fehler kaskadierend aus, und dies hat Auswirkungen auf die nachfolgenden Nachrichten (idealerweise sollte dies nicht sein).


0 für die Antwort № 2

Anstatt die 1000 Entitäten im zu aktualisierenMit dem Befehl könnten Sie ein Ereignis veröffentlichen, um anzugeben, dass der Befehl abgeschlossen wurde, und dann mehrere Abonnenten für dieses Ereignis verwenden, um die Effektentitäten zu aktualisieren. Es scheint mir, dass ein Befehl, der 1000 Entitäten aktualisiert, in mehrere kleinere Befehle aufgeteilt werden sollte. Werfen Sie einen Blick in die Sagen, um zu erfahren, wie Sie lange laufende Geschäftsprozesse bewältigen können. Zum Beispiel könnten Sie Folgendes haben: Prozess gestartet, Schritt 1 abgeschlossen, Schritt 2 abgeschlossen, Prozess abgeschlossen usw.