1

私は、Elasticsearchに接続するServletを使用して検索Webアプリケーションを構築しています。私はTransport Elasticsearchのモジュールに関する質問があります。私はServletContextListenerを実装するクラスのTransportClientを使用してElasticsearchへの接続を開きます。以下は、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!"); 
    } 
} 

ユーザーがクエリを検索するたびに、ServletContextListenerクラスで初期化された同じ「クライアント」接続が使用されます。クライアント接続で同時に複数の要求を処理できますか?または、elasticsearchを照会するために、すべてのユーザーが個別のクライアント接続を必要としますか?ご協力いただきありがとうございます。

答えて

0

そのClientインスタンスは、複数の呼び出しを処理し、複数のスレッドを処理できます。また、1つのClientインスタンスを作成するのはコストがかかるため、1つのClientインスタンスしか持たないようにしてください。

+0

お返事ありがとうございました。同時に処理できる接続数に制限はありますか? –

+1

おそらくOSレベルでの制限です。たとえば、 - https://discuss.elastic.co/t/elasticsearch-throwing-outofmemoryerror-unable-to-create-new-native-thread-error/31686/7。また、ESには、スレッドプールと、さまざまな操作(検索、インデックス作成、一括インデックス作成など)のための待機キューがありますが、それはサーバーレベルです。だからあなたのケースでは、私はOSレベルの限界が技術的な限界であると思う。 –

+0

ありがとう、Andreiさんの説明です。 –

関連する問題