2016-04-12 2 views
2

Wir haben ein Problem, dass NServiceBus nach ca. 4-5 Minuten nach Verbindungsabbruch zu RabbitMQ Server abstürzt.NServiceBus stürzt ab, wenn die Verbindung zum RabbitMQ-Host unterbrochen wird

Um zu reproduzieren, startete ich meine App, sah, dass RabbitMQ die Verbindungen sieht, trennte mein Netzwerkkabel und wartete. Nach ca. 5 Minuten ist der NServiceBus Host abgestürzt.

Wenn in Debug ausgeführt wird, habe ich die folgende Fehlermeldung:

Additional information: The runtime has encountered a fatal error. The address of the error was at 0xf6a94323, on thread 0xf8b8. The error code is 0x80131623. This error may be a bug in the CLR or in the unsafe or non-verifiable portions of user code. Common sources of this bug include user marshaling errors for COM-interop or PInvoke, which may corrupt the stack. 

Auf unserem Server wir folgend in EventLog haben:

Application: NServiceBus.Host.exe 
Framework Version: v4.0.30319 
Description: The application requested process termination through System.Environment.FailFast(string message). 
Message: The following critical error was encountered by NServiceBus: 
Repeated failures when communicating with the broker 
    NServiceBus is shutting down. 
    Stack: 
     at System.Environment.FailFast(System.String, System.Exception) 
     at System.Threading.ExecutionContext.RunInternal(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, Boolean) 
     at System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, Boolean) 
     at System.Threading.QueueUserWorkItemCallback.System.Threading.IThreadPoolWorkItem.ExecuteWorkItem() 
     at System.Threading.ThreadPoolWorkQueue.Dispatch() 

Dies ist unsere RabbitMQ Verbindungszeichenfolge:

<add name="NServiceBus/Transport" connectionString="host=our_host_address;VirtualHost=OurVirtualHost;UserName=OurUser;Password=******;PrefetchCount=1;DequeueTimeout=30" /> 

Was verursacht diesen Absturz? Gibt es eine Möglichkeit, sich davon zu erholen? Wie können Trennungen vom RabbitMQ-Server korrekt gehandhabt werden?

Antwort

2

Dies geschieht, weil der Leistungsschalter dafür sorgt, dass der Dienst nicht hängen bleibt, aber heruntergefahren wird, wenn er nicht arbeiten kann.

Sie können den Endpunkt konfigurieren, dass eine längere Timeout haben, wenn die Verbindung unterbrochen wird, "controlling behavior when broker connection is lost" for more information

Zusätzlich sehen Sie den Service-Recovery bei einem Fehler neu zu starten festlegen.

Verwandte Themen