1

Я создаю поисковое веб-приложение, используя 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? Спасибо за помощь.

ответ

0

Этот экземпляр Client способен обрабатывать несколько вызовов и обрабатывать несколько потоков. И у вас должен быть только один экземпляр клиента, так как это дорого его создать.

+0

Спасибо, Андрей за ваш ответ. Существует ли ограничение на количество подключений, которые он может обрабатывать одновременно? –

+1

Возможно ограничение на уровне ОС. Например: https://discuss.elastic.co/t/elasticsearch-throwing-outofmemoryerror-unable-to-create-new-native-thread-error/31686/7. Кроме того, у ES есть несколько пулов потоков и несколько очередей ожидания для различных операций (поиск, индексирование, объемная индексация и т. Д.), Но это на уровне сервера. Итак, в вашем случае я считаю, что только пределы уровня ОС являются техническими теоретическими ограничениями. –

+0

Спасибо, Андрей за объяснение. –

Смежные вопросы