После нескольких дней работы моя подписка nats отключается и снова работает только после перезагрузки

У меня есть 8 серверов по всему миру и 1 API для балансировки нагрузки. Наш сервер - это небольшой VPS под управлением Ubuntu. На каждом сервере у нас есть небольшой сервис, написанный на C# для публикации информации об использовании сети в Мбит / с каждые 2,5 с. Итак, наше распределение нагрузки, C#, также подписывает NAT и получает нагрузку на серверы и перенаправляет клиентов.

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

Как нуб с NATS, вероятно, я делаю что-то не так или я что-то упускаю.

Что я сделал?

На каждом сервере:

when start the service
_opt = NATS.Client.ConnectionFactory.GetDefaultOptions();

 _opt.Url = config.SyncServerUrl;
 _opt.User = config.SyncServerUser;
 _opt.Password = config.SyncServerPass;
 _opt.AllowReconnect = true;
 _opt.ReconnectWait = config.SyncServerReconnectWait;

 _natsConn = new NATS.Client.ConnectionFactory().CreateConnection(_opt);

at each 2s
if(_natsConn.State == NATS.Client.ConnState.CONNECTED)
{
_natsConn.Publish(config.SyncServerKey, data);
}

При балансировке нагрузки

_opt = NATS.Client.ConnectionFactory.GetDefaultOptions();

_opt.Url = config.SyncServerUrl;
_opt.User = config.SyncServerUser;
_opt.Password = config.SyncServerPass;
_opt.AllowReconnect = true;
_opt.ReconnectWait = config.SyncServerReconnectWait;

_cnn = new NATS.Client.ConnectionFactory().CreateConnection(opt);
_sub = _cnn.SubscribeAsync(config.SyncServerKey);

_sub.MessageHandler += S_MessageHandler;
_sub.Start();

_opt.DisconnectedEventHandler += (sender, ags) => {
        Console.WriteLine("RelaySyncTask >>> Disconnected >>>" + DateTime.UtcNow);

        if (_sub != null) {
                _sub.MessageHandler -= S_MessageHandler;

                if (_sub.IsValid) _sub.Unsubscribe();
        }
};

_opt.ReconnectedEventHandler += (sender, args) => {
        _sub = _cnn.SubscribeAsync(config.SyncServerKey);

        _sub.MessageHandler += S_MessageHandler;
        _sub.Start();
};

Другие вопросы:

Каков поток выполнения этих событий (т. Е. Когда клиент становится медленным и сервер закрывается, его соединение вызывает Disconnect > Close > AsyncError):

  • Отключенные
  • Закрыто
  • Reconnected
  • AsyncError

Когда происходит переподключение? А что будет, если это не получится?

0 ответов

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