有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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) 个答案

  1. # 1 楼答案

    考虑此代码片段:

    // on startup
    
    Node node = nodeBuilder().node();
    Client client = node.client();
    
    // on shutdown
    
    node.close();
    

    根据the documentation,当您创建Node时,它将加入本地弹性搜索集群。这意味着它会向集群中的其他节点宣布自己。。。并开始监听来自其他节点或客户端的请求

    当应用程序退出,JVM终止时,节点显然无法再处理来自其他节点的请求

    • 如果您的应用程序如上所述调用node.close(),那么节点将告诉其他节点它将离开,这样其他节点将知道不再发送任何请求

    • 如果您的应用程序没有调用node.close(),那么其他节点将不知道该节点已离开,并且可能会继续向其发送请求。这些请求将失败,可能导致异常、日志消息等。至少,向无法响应的节点发送请求是浪费时间/资源

    显然,如果您的应用程序是集群中唯一的节点,那么这是没有意义的。然而,做出这样的假设是一个坏主意,而且在(至少)当前应用程序的Node对象上调用close()的小开销可能是值得的