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 选择最佳方法。
- 创建多个客户端,不要关闭它们,而是分配更多资源,以便应用程序快速且不会阻塞。
close
个客户端频繁,这不需要 over-allocating 资源,但是当您为您的请求创建一个新客户端时,延迟会更长。
我想在不同的集群上使用 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 选择最佳方法。
- 创建多个客户端,不要关闭它们,而是分配更多资源,以便应用程序快速且不会阻塞。
close
个客户端频繁,这不需要 over-allocating 资源,但是当您为您的请求创建一个新客户端时,延迟会更长。