java ElasticSearch为什么在客户端或节点上调用close()?
您为什么要在客户端或节点上调用close()
呢?如果不这样做,会产生什么影响
Node node = nodeBuilder().client(true).node();
Client client = node.client();
// index some stuff
client.close(); // <-- why do this ?
node.close(); // <-- why do this ?
我们有一个客户机,其生命周期与我们的应用程序相匹配。我想知道我们是否需要麻烦打电话给client.close()
和node.close()
在应用程序被拆除时
# 1 楼答案
考虑此代码片段:
根据the documentation,当您创建
Node
时,它将加入本地弹性搜索集群。这意味着它会向集群中的其他节点宣布自己。。。并开始监听来自其他节点或客户端的请求当应用程序退出,JVM终止时,节点显然无法再处理来自其他节点的请求
如果您的应用程序如上所述调用
node.close()
,那么节点将告诉其他节点它将离开,这样其他节点将知道不再发送任何请求如果您的应用程序没有调用
node.close()
,那么其他节点将不知道该节点已离开,并且可能会继续向其发送请求。这些请求将失败,可能导致异常、日志消息等。至少,向无法响应的节点发送请求是浪费时间/资源显然,如果您的应用程序是集群中唯一的节点,那么这是没有意义的。然而,做出这样的假设是一个坏主意,而且在(至少)当前应用程序的
Node
对象上调用close()
的小开销可能是值得的