ES 1.7.0,Java TransportClient 每次構建耗時 3-6 秒,嚴重影響搜尋響應。嘗試單例模式不關閉 Client,但 ES 控制台報錯:exception caught on transport layer ... closing connection。
public class ESClient {
private static final TransportClient client;
static {
Settings settings = Settings.builder()
.put("client.transport.sniff", true)
.put("client.transport.ping_timeout", "10s")
.build();
client = new PreBuiltTransportClient(settings)
.addTransportAddress(new TransportAddress(InetAddress.getByName("127.0.0.1"), 9300));
// 預熱:發送一個輕量請求強制建立連接
client.prepareSearch().setSize(0).get();
}
public static TransportClient getClient() { return client; }
// 應用關閉時調用
public static void close() { if (client != null) client.close(); }
}
Settings settings = Settings.builder()
.put("client.transport.sniff", true)
.put("client.transport.ping_timeout", "10s")
.put("transport.tcp.keep_alive", true) // TCP 層面保活
.build();
直接 `new PreBuiltTransportClient(settings)`,無需 `Class.forName`/`Constructor` 反射,減少啟動開銷。
ES 1.7.0 極其古老 (2015 年)。**強烈建議升級至 7.x/8.x**,使用 `RestHighLevelClient` 或新 Java API Client,性能、穩定性、功能全面提升,TransportClient 已在 7.0 棄用、8.0 移除。