RestHighLevelClient 是否保持连接打开?

Is RestHighLevelClient keep connections open?

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

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

来自 official RestHighLevelClient initialization

The high-level client will internally create the low-level client used to perform requests based on the provided builder. That low-level client maintains a pool of connections and starts some threads so you should close the high-level client when you are well and truly done with it and it will in turn close the internal low-level client to free those resources. This can be done through the close method:

在你的情况下,如果你有很多 ES 集群并创建多个 RestHighLevelClient,而不是你猜测的那样,它可能会由于线程及其资源的占用而阻塞你的应用程序,所以你应该明确地调用close 再次创建它时需要更多时间,但在大多数情况下不会阻塞您的应用程序。

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

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