拥有一个包含单个节点的集群:
Node node = NodeBuilder.nodeBuilder().loadConfigSettings(true).node();
有什么区别?
node.close();
和
node.client().admin().cluster().prepareNodesShutdown().execute().actionGet();
从java中正常关闭节点/集群的推荐方法是什么?
答案 0 :(得分:1)
两个提到的操作都有相同的效果。可能的区别在于它们影响的节点。
使用node.close()
关闭自己的节点,即从应用程序启动的节点,如果在应用程序中嵌入elasticsearch集群,则可以是唯一的节点,也可以只是连接到应用程序的客户机节点外部集群通过java api(传输端口)。
使用nodes shutdown api,您可以在一次操作中有效地关闭远程节点,可能还有多个节点和整个群集。因此,命令上下文中的每个节点都将关闭,再次调用close
方法。
此外,两个命令都可以正常关闭节点。
答案 1 :(得分:0)
如果你设法在未连接的数据报套接字上使用shutdown(),那么 将简单地使套接字不可用于进一步send()和recv() 调用(请记住,如果连接()数据报,则可以使用这些调用 插座。)
重要的是要注意shutdown()实际上并不关闭文件 描述符 - 它只是改变了它的可用性。要释放套接字描述符, 你需要使用close()。
但是,就 Elasticserach 而言,API并未特别提及任何差异(只有Client example和Nodes Shutdown example) 。这些是常见的定义差异。最好联系他们的开发(网站底部有一个选项),以获得有关其库实现的更详细说明。
我建议使用node
访问群集,然后循环群集并单独关闭所有节点。但是,这取决于您 真正 想要的内容。