Кролик MQ простоя соединение разорвано
У меня есть служба Windows.NET, работающая как потребитель / подписчик, которая прослушивает очередь сообщений.
Служба Windows работает на той же машине, где установлен Rabbit MQ Server S / W.
Очередь, если она простаивает в течение 60 минут, приводит к обрыву соединения (я знаю это, поскольку я слежу за панелью мониторинга пользовательского интерфейса) и переводит службу Windows в плохое состояние.
Это разочаровывает, чтобы решить. Я применил настройку сердцебиения к клиенту rabbit mq, но это никак не повлияло.
Следующая ошибка - то, что я получаю в файле журнала, когда разрывается соединение
=ERROR REPORT==== 22-Aug-2017::12:20:29 ===
closing AMQP connection <0.1186.0> ([FE80::C00E:F801:A2A7:8530]:61481 ->
[FE80::C00E:F801:A2A7:8530]:5672):
missed heartbeats from client, timeout: 30s
Настройки файла журнала сервера Rbbit mq: [{rabbit,[ {heartbeat, 60}]}].
Код клиента:
var connectionFactory = new ConnectionFactory
{
HostName = hostName,
UserName = userName,
Password = password,
RequestedHeartbeat = heartBeat,
AutomaticRecoveryEnabled = true,
NetworkRecoveryInterval = TimeSpan.FromSeconds(numberOfSecondsInterval),
RequestedConnectionTimeout = RequestedConnectionTimeoutInMiliseconds
};
if (port > 0)
connectionFactory.Port = port;
var connection = connectionFactory.CreateConnection();
var model = connection.CreateModel();
model.BasicQos(prefetchSize: 0, prefetchCount: 1, global: false);
return new Tuple<IConnection, IModel>(connection, model);
вышеуказанное значение сердцебиения установлено на 30 секунд,
значение восстановления сети установлено на 10 секунд и
время ожидания запроса на соединение установлено на 2 секунды
я не знаю, что еще мне не хватает здесь с точки зрения конфигурации?
Сервер, на котором запущено выше, является Windows 2012 R2
В основном я ожидаю, что соединения останутся на месте всегда, независимо от времени простоя.
Есть ли в Windows параметр поддержки TCP на уровне ОС, который мне нужен, чтобы убедиться в его наличии?
Кролик MQ версия 3.6.8
вырвать мои волосы на этом, так что любые указатели очень ценятся
1 ответ
Мне удалось успешно предотвратить сброс неактивных подключений (через 60 минут) на сервере RabbitMQ, применив логику повторного подключения, на которую ссылается этот пост SO.
Примечание: ответ был обновлен, чтобы указать, что в последней версии клиента RabbitMQ включено автоматическое восстановление соединения, поэтому логика повторного подключения вручную не требуется. В моем случае это не было правдой, так как я уже применил эти настройки, но я все еще видел, как после 60 минут простоя соединения обрывались. Клиент и сервер в моем сценарии находятся на одной машине.
Если кто-нибудь случайно узнает, откуда исходит настройка 60-минутного простоя, я был бы признателен, я просмотрел все параметры конфигурации rabbitmq и не смог найти ничего, связанного с этим.