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