简介
正文
参考文档: ElasticSearch Java API
ElasticSearch Java API
1. ElasticSearch 6.x.x 获取客户端
我这里介绍的是针对于Version 6.4.2
通过TransportClient这个接口,我们可以不启动节点就可以和ES集群进行通信,它需要指定ES集群中其中一台或多台机的IP地址和端口
// on startup
TransportClient client = new PreBuiltTransportClient(Settings.EMPTY)
.addTransportAddress(new TransportAddress(InetAddress.getByName("host1"), 9300))
.addTransportAddress(new TransportAddress(InetAddress.getByName("host2"), 9300));
// on shutdown
client.close();
如果需要使用其他名称的集群(默认是elasticsearch),需要如下设置:
Settings settings = Settings.builder()
.put("cluster.name", "myClusterName").build();
TransportClient client = new PreBuiltTransportClient(settings);
//Add transport addresses and do something with the client...
通过TransportClient这个接口,自动嗅探整个集群的状态,ES会自动把集群中其它机器的IP地址加到客户端中。这样做的好处是,一般你不用手动设置集群里所有节点的ip去连接客户端,它会自动帮你添加,并且自动发现新加入集群的机器
Settings settings = Settings.builder()
.put("client.transport.sniff", true).build();
TransportClient client = new PreBuiltTransportClient(settings);
小结一下两种获取ES不同Setting的方式:
指定集群名称获取集群:
// 创建客户端
//根据集群名称创建setting
Settings settings = Settings.builder()
.put("cluster.name", "clustername")
.put("client.transport.sniff", true)
.build();
TransportClient client = new PreBuiltTransportClient(settings);
client.addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("IP"), 9300));
不指定集群名称获取集群
//创建Settings 忽略集群名称
Settings settings = Settings.builder()
.put("client.transport.ignore_cluster_name", true).build();
//创建客户端
TransportClient transportClient = new PreBuiltTransportClient(settings);
transportClient.addTransportAddress(new TransportAddress(InetAddress.getByName(host), Integer.parseInt(port)));
注意!
当ES服务器监听(publish_address)使用内网服务器IP,而访问(bound_addresses)使用外网IP时,不要设置client.transport.sniff为true。
不设置client.transport.sniff时,默认为false(关闭客户端去嗅探整个集群的状态)。
因为在自动发现时会使用内网IP进行通信,导致无法连接到ES服务器。
因此此时需要直接使用addTransportAddress方法把集群中其它机器的ip地址加到客户端中。
对上面的注意作白话解释:本地开发关闭
sniff开关,关闭客户端去嗅探整个集群的状态,手动添加IP、PORT到客户端。在SIT、UAT或PROD环境部署应用时可开启sniff开关。










网友评论