【问题标题】:Is RestHighLevelClient keep connections open?RestHighLevelClient 是否保持连接打开?
【发布时间】:2020-10-18 07:17:14
【问题描述】:

我想通过跨集群机制不支持的命令(例如关闭和打开索引)在不同的集群上使用RestHighLevelClient
我的问题是,如果我为每个集群使用多个RestHighLevelClient 实例,它会为每个集群保持连接打开吗? (以确保我没有阻塞应用程序)

【问题讨论】:

    标签: elasticsearch resthighlevelclient elasticsearch-rest-client


    【解决方案1】:

    通过查看各种资源,RestHighLevelClient 似乎保持连接打开,除非您在其上明确调用 client.close();

    来自 official RestHighLevelClient initialization

    高级客户端将在内部创建使用的低级客户端 根据提供的构建器执行请求。那个低级 客户端维护一个连接池并启动一些线程所以你 当您真正完成时,应该关闭高级客户端 有了它,它将依次关闭内部低级客户端以 释放这些资源。 这可以通过 close 方法完成:

    在您的情况下,如果您有很多 ES 集群并创建多个 RestHighLevelClient 而不是您猜测的,它可能会由于线程及其资源的持有而阻塞您的应用程序,因此您应该显式调用 close当您再次创建它时,这将需要更多时间,但在大多数情况下不会阻塞您的应用程序。

    我建议您对您的应用程序进行一些资源基准测试,并根据您的权衡选择最佳方法。

    1. 创建多个客户端,不要关闭它们,而是分配更多资源,以便应用程序快速且不会阻塞。
    2. close 客户端频繁,这不需要过度分配资源,但是当您为请求创建新客户端时,延迟会更长。

    【讨论】:

      猜你喜欢
      • 2011-08-31
      • 2012-12-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多