Кролик 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 и не смог найти ничего, связанного с этим.

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