【问题标题】:Elasticsearch Transport Client connectionElasticsearch 传输客户端连接
【发布时间】:2017-01-02 10:30:16
【问题描述】:

我正在使用连接到 Elasticsearch 的 Servlet 构建一个搜索 Web 应用程序。我对 Elasticsearch 的 Transport 模块有疑问。我正在使用实现 ServletContextListener 的类中的 TransportClient 打开与 Elasticsearch 的连接。下面是 ElasticsearchServletContextListener 类的代码。

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 类中初始化的相同“客户端”连接。客户端连接可以同时处理多个请求吗?还是每个用户都需要单独的客户端连接来查询弹性搜索?谢谢您的帮助。

【问题讨论】:

    标签: java servlets elasticsearch servletcontextlistener elasticsearch-java-api


    【解决方案1】:

    Client 实例能够处理多个调用和处理多个线程。而且您应该只拥有一个 Client 实例,因为创建一个实例的成本很高。

    【讨论】:

    • 谢谢安德烈的回复。它可以同时处理的连接数是否有限制?
    • 可能是操作系统级别的限制。例如 - discuss.elastic.co/t/…。而且,ES 也有一些线程池和一些等待队列用于各种操作(搜索、索引、批量索引等),但那是在服务器级别。因此,在您的情况下,我认为只有操作系统级别的限制才是技术理论限制。
    • 谢谢安德烈的解释。
    • 这是官方记录的吗?可以分享一个链接吗?
    • @DavidSoroko 我没有链接,但相信我:-),就是这样。这就是这些 Java 对象实例需要的样子(线程池、客户端接口、数据库驱动程序等)。
    猜你喜欢
    • 2017-07-05
    • 1970-01-01
    • 2016-09-28
    • 2017-08-31
    • 1970-01-01
    • 2016-11-21
    • 1970-01-01
    • 2021-09-24
    • 2013-03-20
    相关资源
    最近更新 更多