我想知道打开和关闭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();
}
谢谢!
答案 0 :(得分:4)
我认为您不必在每次请求后关闭传输客户端。这将是一个太大的开销。
查看文档here。
// 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();
在那里你可以看到“启动时”和“关机时”的注释行。所以基本上告诉你何时应该致电client.close()
。
答案 1 :(得分:2)
您应该为所有请求使用单个客户端。
打开连接是一项代价高昂的操作,每次发出请求时都不想打开和关闭连接。
结束服务器或应用程序时,只需关闭客户端即可。