网站建设ssc源码平台,传奇游戏在线玩,检测软件定制,现在什么网页游戏好玩首先是封装了一个类里定义了关于集群名称和集群节点#xff1b;以及关于索引的名称和集群的名称做一个关联#xff1b;将多个集群封装存储得到类中
/*** es集群类*/
Data
public class EsClusterConfig implements Serializable {/*** 集群名称*/private String name;/*** 集…首先是封装了一个类里定义了关于集群名称和集群节点以及关于索引的名称和集群的名称做一个关联将多个集群封装存储得到类中
/*** es集群类*/
Data
public class EsClusterConfig implements Serializable {/*** 集群名称*/private String name;/*** 集群节点*/private String nodes;
}/*** 索引类*/
Data
public class EsIndexInfo implements Serializable {/*** 集群名称*/private String clusterName;/*** 索引名称*/private String indexName;
}Component
ConfigurationProperties(prefix es.cluster)
public class EsConfigProperties {private ListEsClusterConfig esConfigs new LinkedList();public ListEsClusterConfig getEsConfigs() {return esConfigs;}public void setEsConfigs(ListEsClusterConfig esConfigs) {this.esConfigs esConfigs;}
}yml文件中定义关于集群的一个信息
es:cluster:es-configs[0]:name: 玫瑰不会过期nodes: 127.0.0.1:9200
通过PostConstruct注解实现提前的初始化赋值和Bean的InitializingBean接口差不多
PostConstruct
public void initialize() {// 从配置属性对象中获取 Elasticsearch 集群配置列表ListEsClusterConfig esConfigs esConfigProperties.getEsConfigs();// 遍历每个 Elasticsearch 集群配置for (EsClusterConfig esConfig : esConfigs) {// 打印日志记录当前正在初始化的配置名称和节点信息log.info(initialize.config.name:{},node:{}, esConfig.getName(), esConfig.getNodes());// 调用 initRestClient 方法初始化与当前配置对应的 RestHighLevelClient初始话对应的索引RestHighLevelClient restHighLevelClient initRestClient(esConfig);// 如果初始化成功即返回的客户端对象不为 nullif (restHighLevelClient! null) {// 将配置名称和对应的客户端对象放入名为 clientMap 的映射中方便后续根据配置名称获取对应的客户端clientMap.put(esConfig.getName(), restHighLevelClient);} else {// 如果初始化失败打印错误日志记录配置名称和节点信息以及初始化错误的提示log.error(config.name:{},node:{}.initError, esConfig.getName(), esConfig.getNodes());}}
}
调用对应的分割方法存储到HttpHost对象中
private RestHighLevelClient initRestClient(EsClusterConfig esClusterConfig) {// 将配置中的节点字符串以逗号分隔得到各个节点的字符串表示String[] ipPortArr esClusterConfig.getNodes().split(,);// 创建一个用于存储 HttpHost 对象的列表ListHttpHost httpHostList new ArrayList(ipPortArr.length);// 遍历每个节点字符串for (String ipPort : ipPortArr) {// 将节点字符串以冒号分隔得到 IP 和端口信息String[] ipPortInfo ipPort.split(:);// 如果正确分割为两部分IP 和端口if (ipPortInfo.length 2) {// 创建一个 HttpHost 对象传入 IP 和端口并将其添加到列表中HttpHost httpHost new HttpHost(ipPortInfo[0], NumberUtils.toInt(ipPortInfo[1]));httpHostList.add(httpHost);}}// 将列表转换为数组HttpHost[] httpHosts new HttpHost[httpHostList.size()];httpHostList.toArray(httpHosts);// 使用 HttpHost 数组创建 RestClientBuilder 对象RestClientBuilder builder RestClient.builder(httpHosts);// 使用 RestClientBuilder 创建 RestHighLevelClient 对象RestHighLevelClient restHighLevelClient new RestHighLevelClient(builder);// 返回创建的 RestHighLevelClient 对象return restHighLevelClient;
}
假设esClusterConfig.getNodes()返回的字符串是 192.168.1.100:9200,192.168.1.101:9200表示有两个 Elasticsearch 节点分别在不同的 IP 地址上端口都是 9200。
执行String[] ipPortArr esClusterConfig.getNodes().split(,);后ipPortArr这个数组将包含两个元素 192.168.1.100:9200 192.168.1.101:9200 这样就把配置中的多个以逗号分隔的节点信息拆分成了数组中的单个节点字符串方便后续进一步处理每个节点的 IP 和端口信息来创建与 Elasticsearch 节点的连接。
最终存储到HttpHost中建立一个RestHighLevelClient对象来存储到map中key是集群名称value就是调用的对应对象
总结
首先封装三个对象一个是关于es集群的对象包括集群名称、该名称下的节点还有一个索引表存储集群名称和索引的。然后通过PostConstruct这个注解来实现提前注入获取到存储集群名称和节点的对象放到RestHighLevelClient这个对象中将其存储一个map中后续操作我们只是需要通过get集群名称就可以获取到这个对象了。
而对应的对应的索引的切换只需要通过传入一个EsIndexInfo对象存储的集群名称和索引就可以进行具体的操作了