简介
正文
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
开关。
网友评论