NServiceBus падает при потере подключения к хосту RabbitMQ

У нас проблема с тем, что NServiceBus дает сбой примерно через 4-5 минут после потери соединения с RabbitMQ Server.

Для воспроизведения я запустил свое приложение, увидел, что RabbitMQ видит соединения, отключил сетевой кабель и ждал. Примерно через 5 минут хост NServiceBus потерпел крах.

При запуске в Debug я получил следующее сообщение об ошибке:

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.

На нашем сервере у нас есть следующее в EventLog:

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()

Это наша строка подключения RabbitMQ:

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

Что является причиной этого сбоя? Есть ли способ восстановить его / поймать его? Как мы можем изящно обрабатывать отключения от сервера RabbitMQ?

1 ответ

Решение

Это происходит потому, что автоматический выключатель следит за тем, чтобы служба не зависала, а отключалась, если она не в состоянии выполнять свою работу.

Вы можете настроить конечную точку на более длительный тайм-аут в случае разрыва соединения, см. " Управление поведением при потере соединения с брокером" для получения дополнительной информации

Кроме того, вы можете настроить восстановление службы на перезагрузку при сбое.

Другие вопросы по тегам