我想用 RestHighLevelClient 在具有跨集群mechanizem不支持的命令的不同集群上(例如close和open index)。我的问题是,如果我使用多个 RestHighLevelClient 对于每个集群,它将保持每个集群的连接打开(以确保我没有阻塞应用程序)
RestHighLevelClient
zysjyyx41#
通过查看各种资源,似乎 RestHighLevelClient 保持连接打开,除非您显式调用 client.close(); 在上面。从resthighlevelclient初始化高级客户机将在内部创建用于根据提供的生成器执行请求的低级客户机。这个低级客户机维护一个连接池,并启动一些线程,因此当您很好地完成了高级客户机时,您应该关闭它,然后它将关闭内部低级客户机以释放这些资源。这可以通过关闭方法完成:在你的例子中,如果你有很多es集群,并且创建了多个 RestHighLevelClient 与您所猜测的不同,由于线程及其资源的占用,它可能会阻塞您的应用程序,因此您应该显式地调用 close 这将需要更多的时间,当您再次创建它,但不会扼杀您的应用程序在大多数情况下。我建议您对您的应用程序进行一些资源基准测试,并根据您的权衡选择最佳的方法。创建多个客户机,不要关闭它们,而是分配更多的资源,这样应用程序速度更快,不会阻塞。 close 通常情况下,这不需要过度分配资源,但当您为请求创建新的客户端时,延迟会更大。
client.close();
close
1条答案
按热度按时间zysjyyx41#
通过查看各种资源,似乎
RestHighLevelClient
保持连接打开,除非您显式调用client.close();
在上面。从resthighlevelclient初始化
高级客户机将在内部创建用于根据提供的生成器执行请求的低级客户机。这个低级客户机维护一个连接池,并启动一些线程,因此当您很好地完成了高级客户机时,您应该关闭它,然后它将关闭内部低级客户机以释放这些资源。这可以通过关闭方法完成:
在你的例子中,如果你有很多es集群,并且创建了多个
RestHighLevelClient
与您所猜测的不同,由于线程及其资源的占用,它可能会阻塞您的应用程序,因此您应该显式地调用close
这将需要更多的时间,当您再次创建它,但不会扼杀您的应用程序在大多数情况下。我建议您对您的应用程序进行一些资源基准测试,并根据您的权衡选择最佳的方法。
创建多个客户机,不要关闭它们,而是分配更多的资源,这样应用程序速度更快,不会阻塞。
close
通常情况下,这不需要过度分配资源,但当您为请求创建新的客户端时,延迟会更大。