【发布时间】:2020-10-18 07:17:14
【问题描述】:
我想通过跨集群机制不支持的命令(例如关闭和打开索引)在不同的集群上使用RestHighLevelClient。
我的问题是,如果我为每个集群使用多个RestHighLevelClient 实例,它会为每个集群保持连接打开吗? (以确保我没有阻塞应用程序)
【问题讨论】:
标签: elasticsearch resthighlevelclient elasticsearch-rest-client
我想通过跨集群机制不支持的命令(例如关闭和打开索引)在不同的集群上使用RestHighLevelClient。
我的问题是,如果我为每个集群使用多个RestHighLevelClient 实例,它会为每个集群保持连接打开吗? (以确保我没有阻塞应用程序)
【问题讨论】:
标签: elasticsearch resthighlevelclient elasticsearch-rest-client
通过查看各种资源,RestHighLevelClient 似乎保持连接打开,除非您在其上明确调用 client.close();。
来自 official RestHighLevelClient initialization
高级客户端将在内部创建使用的低级客户端 根据提供的构建器执行请求。那个低级 客户端维护一个连接池并启动一些线程所以你 当您真正完成时,应该关闭高级客户端 有了它,它将依次关闭内部低级客户端以 释放这些资源。 这可以通过 close 方法完成:
在您的情况下,如果您有很多 ES 集群并创建多个 RestHighLevelClient 而不是您猜测的,它可能会由于线程及其资源的持有而阻塞您的应用程序,因此您应该显式调用 close当您再次创建它时,这将需要更多时间,但在大多数情况下不会阻塞您的应用程序。
我建议您对您的应用程序进行一些资源基准测试,并根据您的权衡选择最佳方法。
close 客户端频繁,这不需要过度分配资源,但是当您为请求创建新客户端时,延迟会更长。【讨论】: