TransportClient使用传输模块远程连接到一个弹性搜索集群。它不加入集群,但只获得一个或多个初始传输ip地址,并在每个动作上与它们进行轮询(尽管大多数操作可能是"two hop" 操作)。
// 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附带一个集群嗅探特性,该特性允许它动态地添加新主机并删除旧主机。在启用嗅嗅时,TransportClient将连接到其内部节点列表中的节点,该列表是通过调用addTransportAddress构建的。在此之后,TransportClient将调用这些节点上的内部集群状态API来发现可用的数据节点。客户机的内部节点列表将仅用这些数据节点替换。默认情况下,此列表每隔5秒刷新一次。注意,嗅探器连接的IP地址是在这些节点的搜索配置中声明为发布地址的。
请记住,如果该node不是一个数据节点,该列表可能不包括它连接到的原始节点。例如,如果您最初连接到一个主节点,在嗅探之后,没有进一步的请求将进入主节点,而是指向任何数据节点。TransportClient不包含非数据节点的原因是为了避免将搜索流量发送到只掌握节点。
为了启用嗅探,设置client.transport.sniff
为true
:
Settings settings = Settings.builder()
.put("client.transport.sniff", true).build();
TransportClient client = new PreBuiltTransportClient(settings);
其他transport client级别设置包括:
client.transport.ignore_cluster_name | Set to (since 0.19.4) |
client.transport.ping_timeout | The time to wait for a ping response from a node. Defaults to |
client.transport.nodes_sampler_interval | The time to wait for a ping response from a node. Defaults to 5s . |
附上我这两天写的连接代码:
public class SearchEsUtils implements SearchEsUtilsInterface {
TransportClient transportClient;
//索引库名
String index = "ori_epotential_2018";
//类型名称
String type = "ori_epotential";
//集群名称
String es_cluster = "es_cluster";
//集群连接IP地址
String es_ip = "192.168.0.14";
//集群连接端口号
Integer es_port = 9300;
public SearchEsUtils() {
try {
init();
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* @throws IOException
* 初始化ES客户端连接
*/
public void init() throws IOException{
/**
* 1:通过 setting对象来指定集群配置信息
*/
Settings setting = Settings.builder()
.put("cluster.name", es_cluster)//指定集群名称
.put("client.transport.sniff", true)//启动嗅探功能
.build();
/**
* 2:创建客户端
* 通过setting来创建,若不指定则默认链接的集群名为elasticsearch
* 链接使用TCP协议即9300
*/
transportClient = new PreBuiltTransportClient(setting)
.addTransportAddress(new TransportAddress(InetAddress.getByName(es_ip), es_port));
/**
* 3:查看集群信息
* 注意我的集群结构是:
* 131的elasticsearch.yml中指定为主节点不能存储数据,
* 128的elasticsearch.yml中指定不为主节点只能存储数据。
* 所有控制台只打印了192.168.79.128,只能获取数据节点
*
*/
List<DiscoveryNode> connectedNodes = transportClient.connectedNodes();
for(DiscoveryNode node : connectedNodes)
{
System.out.println(node.getHostAddress());
}
}
}