ElasticSearch(二) Transport Client Connection By Domain

/**
* 初始化EsClient
*
* @param esClusterDomain
* @param esClusterName
*/
private static void initClient(String esClusterDomain, String esClusterName) {

String url = String.format("%s%s", esClusterDomain, "/_nodes/transport");

if (!url.contains("http")) {
url = String.format("%s%s", "http://", url);
}

List<EsNodeInfoBO> esNodeInfos = getEsNodeInfo(url);

if (CollectionUtils.isEmpty(esNodeInfos)) {
esNodeInfos = getEsNodesByIp();

if (CollectionUtils.isEmpty(esNodeInfos)) {
logger.error("[[title=initClient]]Es 启动失败,集群不存在");
return;
}
}

String esNodeInfoLog = JSON.toJSONString(esNodeInfos);
logger.info("[[title=initClient]]{}", esNodeInfoLog);

logger.info("[[title=initClient]]clustername={}", esClusterName);
Settings settings = Settings.builder().put("client.transport.sniff", true).put("cluster.name", esClusterName)
.build();
try {
client = new PreBuiltTransportClient(settings);

for (EsNodeInfoBO esNode : esNodeInfos) {
client.addTransportAddress(
new InetSocketTransportAddress(InetAddress.getByName(esNode.getIp()), esNode.getProt()));
}
} catch (UnknownHostException e) {
logger.error("[[title=initClient]]clustername={}", esClusterName, e);
}

Runtime.getRuntime().addShutdownHook(new Thread(() -> {
client.close();
}));

}

/**
* 获取Es集群节点
*
* @param url
* @return
*/
private static List<EsNodeInfoBO> getEsNodeInfo(String url) {
List<EsNodeInfoBO> esNodes = new ArrayList<>();

if (StringUtils.isBlank(url)) {
return esNodes;
}

try {
String uriResponse = UriUtil.getUrlResponseBybasicAuth(esClusterDomain, esUserName, esPassword, url);

logger.info("[[title=getEsNodeInfo]] 获取到的json串为{}", uriResponse);

JSONObject jsonObj = JSON.parseObject(uriResponse);

if (!jsonObj.containsKey("nodes")) {
return esNodes;
}

JSONObject nodes = jsonObj.getJSONObject("nodes");

for (Map.Entry<String, Object> entry : nodes.entrySet()) {
JSONObject value = (JSONObject) entry.getValue();
String transportAddress = value.getString("transport_address");

String[] nodeInfos = transportAddress.split(":");

if (nodeInfos.length == 2) {
EsNodeInfoBO esNodeInfoBo = new EsNodeInfoBO();
esNodeInfoBo.setIp(nodeInfos[0]);
esNodeInfoBo.setProt(Integer.parseInt(nodeInfos[1]));
esNodes.add(esNodeInfoBo);
}
}
} catch (Exception e) {
logger.error("[[title=getEsNodeInfo]]获取EsNode 失败}", e);
}

return esNodes;
}

原文地址:https://www.cnblogs.com/xiaocandou/p/8117417.html