elasticsearch,Java,elasticsearch" /> elasticsearch,Java,elasticsearch" />

Java 在Elasticsearch中何时关闭TransportClient?

Java 在Elasticsearch中何时关闭TransportClient?,java,elasticsearch,Java,elasticsearch,我想知道在打开和关闭java elasticsearch客户端时的最佳实践是什么。 我是否在每次请求之间打开和关闭它?或者我可以为所有请求使用一个客户端实例吗 private Client client; @PostConstruct public void init() { try { client = new PreBuiltTransportClient(Settings.EMPTY) .addTransportAddress(ne

我想知道在打开和关闭java elasticsearch客户端时的最佳实践是什么。 我是否在每次请求之间打开和关闭它?或者我可以为所有请求使用一个客户端实例吗

private Client client;

@PostConstruct
public void init() {
    try {
        client = new PreBuiltTransportClient(Settings.EMPTY)
                .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName(host), port));
    } catch (UnknownHostException e) {
        LOGGER.error("Unable to create ESClient : {}", e);
    }
}

@PreDestroy
public void destroy() {
    client.close();
}

谢谢大家!

我认为您不必在每次请求后关闭传输客户端。这将是一个太多的开销

见文件


在这里,您可以看到注释行“启动时”和“关闭时”。因此,基本上这会告诉您何时应该调用
client.close()

所有请求都应该使用一个客户端

打开连接是一项代价高昂的操作,您不希望每次发出请求时都打开和关闭一个连接


在结束服务器或应用程序时,只需关闭客户端。

如果我想每秒执行10K请求,该怎么办?考虑到我的REST服务器几乎从未停止过,因为它一直在为客户机的请求提供服务,下面会打开多少个套接字?它们什么时候会关闭?我确实遇到了fd max limit问题,所以如果我了解套接字何时打开和关闭,这将有助于我尝试围绕它建模解决方案
// on startup

TransportClient client = new PreBuiltTransportClient(Settings.EMPTY)
        .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("host1"), 9300))
        .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("host2"), 9300));

// on shutdown

client.close();