Я создаю поисковое веб-приложение, используя Servlet, который подключается к Elasticsearch. У меня есть вопрос относительно модуля Elicsearch Transport. Я открываю соединение с Elasticsearch, используя TransportClient в классе, который реализует ServletContextListener. Ниже приведен код для класса ElasticsearchServletContextListener.Elasticsearch Transport Клиентское соединение
public class ElasticsearchContextListener implements ServletContextListener {
@Override
public void contextInitialized(ServletContextEvent servletContextEvent) {
System.out.println("Starting up!");
try {
Client client = TransportClient.builder().build().addTransportAddress(
new InetSocketTransportAddress(InetAddress.getByName("IP-address"),9300));
//Storing the client connection in a static variable
Parameters.setESclient(client);
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@Override
public void contextDestroyed(ServletContextEvent servletContextEvent) {
Parameters.getESclient().close();
System.out.println("Shutting down!");
}
}
Теперь всякий раз, когда пользователь ищет в запросе он использует такое же соединение «клиент», который инициализируется в классе контекста сервлета. Может ли клиентское соединение обрабатывать несколько запросов одновременно? Или каждый пользователь нуждается в отдельном клиентском соединении для запроса elasticsearch? Спасибо за помощь.
Спасибо, Андрей за ваш ответ. Существует ли ограничение на количество подключений, которые он может обрабатывать одновременно? –
Возможно ограничение на уровне ОС. Например: https://discuss.elastic.co/t/elasticsearch-throwing-outofmemoryerror-unable-to-create-new-native-thread-error/31686/7. Кроме того, у ES есть несколько пулов потоков и несколько очередей ожидания для различных операций (поиск, индексирование, объемная индексация и т. Д.), Но это на уровне сервера. Итак, в вашем случае я считаю, что только пределы уровня ОС являются техническими теоретическими ограничениями. –
Спасибо, Андрей за объяснение. –