我想在不同的集群上使用RestHighLevelClient
,其中包含Cross-Cluster mechanizem不支持的命令(例如关闭和打开索引(
我的问题是,如果我为每个集群使用多个RestHighLevelClient
实例,它会为每个集群保持连接打开吗?(为了确保我没有阻塞应用程序(
通过查看各种资源,似乎RestHighLevelClient
会保持连接打开,除非您在其上显式调用client.close();
。
来自官方RestHighLevelClient初始化
高级客户端将在内部创建所使用的低级客户端以基于所提供的构建器来执行请求。那个低级客户端维护一个连接池并启动一些线程,因此当你做得很好并且真正完成时,应该关闭高级客户使用它,它将关闭内部低级客户端释放这些资源这可以通过关闭方法完成:
在您的情况下,如果您有很多ES集群,并且创建了多个RestHighLevelClient
,那么它可能会由于线程及其资源的占用而阻塞您的应用程序,因此您应该显式调用close
,当您再次创建它时,这将需要更多的时间,但在大多数情况下不会阻塞应用程序。
我建议您在应用程序上进行一些资源基准测试,并根据您的权衡选择尽可能好的方法。
- 创建多个客户端,不要关闭它们,而是分配更多的资源,这样应用程序就可以快速运行,不会阻塞
close
客户端,这不需要过度分配资源,但当您为请求创建新客户端时,延迟会更大