После нескольких дней работы моя подписка 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
Когда происходит переподключение? А что будет, если это не получится?