Почему бы не инициализировать TcpSyslogMessageSender перед каждым периодическим SendMessage() ?

#java #collections #syslog #garbage

#java #Коллекции #системный журнал #мусор

Вопрос:

Я использую CloudBees Syslog Java Client в простом приложении для периодической отправки сообщений системного журнала на сервер. Все работает нормально, но я подумал — если TcpSyslogMessageSender-класс инициализируется в каждом цикле, он перестанет отправлять новые сообщения после 10 итераций без каких-либо исключений. Я могу легко изменить это и переместить инициализацию объекта в конструктор вызывающего класса, но я хочу понять, почему это так. С моей точки зрения, я инициализирую чистый новый объект на каждой итерации. Сборка мусора должна удалять старые объекты и освобождать используемые сетевые ресурсы. Но, возможно, это не так просто. 🙂

 while(true){
            TcpSyslogMessageSender messageSender = new TcpSyslogMessageSender();
            messageSender.setDefaultMessageHostname(...);
            ...
            messageSender.sendMessage(msg);
}
  

Хотелось бы узнать об этом!

Приветствия,

cmax

Ответ №1:

Я отвечаю сам себе: я узнал, что TcpSyslogMessageSender имеет метод закрытия, который фактически закрывает используемый сокет. Похоже, что было невозможно открыть более 10 сокетов из одного Java-экземпляра параллельно. К сожалению, завершающий вызов не был частью данного примера кода. Теперь нет абсолютно никаких проблем инициализировать и повторно инициализировать TcpSyslogMessageSender много раз. Надеюсь, кто-то найдет это полезным.