2

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

4

1 回答 1

2

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

来自官方的 RestHighLevelClient 初始化

高级客户端将在内部创建用于基于提供的构建器执行请求的低级客户端。该低级客户端维护一个连接池并启动一些线程,因此您应该在真正完成它时关闭高级客户端,然后它会关闭内部低级客户端以释放这些资源。这可以通过 close 方法完成:

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

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

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