ElasticSearch6.X版本Java Api中文详解(一)之TransportClient客户端连接方式

 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.snifftrue:


Settings settings = Settings.builder()
        .put("client.transport.sniff", true).build();
TransportClient client = new PreBuiltTransportClient(settings);

其他transport client级别设置包括:

client.transport.ignore_cluster_name

Set to true to ignore cluster name validation of connected nodes.

 (since 0.19.4)

client.transport.ping_timeout

The time to wait for a ping response from a node. Defaults to 5s.

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());  
        }  
	}
}

猜你喜欢

转载自blog.csdn.net/zhou_shaowei/article/details/80018130