Elasticsearch Java API - 客户端连接(TransportClient,PreBuiltXPackTransportClient)(一)
2017-11-13 00:00
531 查看
摘要: Elasticsearch Java API - 客户端连接(TransportClient,PreBuiltXPackTransportClient)
TransportClient:
作为一个外部访问者,请求ES的集群,对于集群而言,它是一个外部因素。
NodeClient
作为ES集群的一个节点,它是ES中的一环,其他的节点对它是感知的。
XPackTransportClient:
服务安装了
重要:客户端版本应该和服务端版本保持一致
TransportClient旨在被Java高级REST客户端取代,该客户端执行HTTP请求而不是序列化的Java请求。 在即将到来的Elasticsearch版本中将不赞成使用TransportClient,建议使用Java高级REST客户端。
上面的警告比较尴尬,但是在 5xx版本中使用还是没有问题的,可能使用rest 客户端兼容性更好做一些。
Elasticsearch Java Rest API 手册
在
transport 版本号最好就是与Elasticsearch版本号一致。
对于ES Client,有两种形式,一个是TransportClient,一个是NodeClient。两个的区别为:
TransportClient作为一个外部访问者,通过HTTP去请求ES的集群,对于集群而言,它是一个外部因素。
NodeClient顾名思义,是作为ES集群的一个节点,它是ES中的一环,其他的节点对它是感知的,不像TransportClient那样,ES集群对它一无所知。NodeClient通信的性能会更好,但是因为是ES的一环,所以它出问题,也会给ES集群带来问题。NodeClient可以设置不作为数据节点,在elasticsearch.yml中设置,这样就不会在此节点上分配数据。
如果用ES的节点,仁者见仁智者见智。
本实例代码已经上传到 Git ElasticsearchClient.java
所有实例 已经上传到Git
使用Maven管理项目,把下面代码增加到
一定要修改默认仓库地址为https://artifacts.elastic.co/maven ,因为这个库没有上传到Maven中央仓库,如果有自己的 maven ,请配置代理
本实例代码已经上传到 Git ElasticsearchXPackClient.java
所有实例 已经上传到Git
更多请浏览 spring-boot-starter-es 开源项目
如何有任何问题请关注微信公众号给我留言
Elasticsearch Java API 客户端连接
一个是TransportClient,一个是
NodeClient,还有一个
XPackTransportClient
TransportClient:
作为一个外部访问者,请求ES的集群,对于集群而言,它是一个外部因素。
NodeClient
作为ES集群的一个节点,它是ES中的一环,其他的节点对它是感知的。
XPackTransportClient:
服务安装了
x-pack插件
重要:客户端版本应该和服务端版本保持一致
TransportClient旨在被Java高级REST客户端取代,该客户端执行HTTP请求而不是序列化的Java请求。 在即将到来的Elasticsearch版本中将不赞成使用TransportClient,建议使用Java高级REST客户端。
上面的警告比较尴尬,但是在 5xx版本中使用还是没有问题的,可能使用rest 客户端兼容性更好做一些。
Elasticsearch Java Rest API 手册
Maven Repository
Elasticsearch Java API包已经上传到 Maven Central在
pom.xml文件中增加:
transport 版本号最好就是与Elasticsearch版本号一致。
<dependency> <groupId>org.elasticsearch.client</groupId> <artifactId>transport</artifactId> <version>5.6.3</version> </dependency>
Transport Client
不设置集群名称
// on startup //此步骤添加IP,至少一个,如果设置了"client.transport.sniff"= true 一个就够了,因为添加了自动嗅探配置 TransportClient client = new PreBuiltTransportClient(Settings.EMPTY) .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("host1"), 9300)) .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("host2"), 9300)); // on shutdown 关闭client client.close();
设置集群名称
Settings settings = Settings.builder() .put("cluster.name", "myClusterName").build(); //设置ES实例的名称 TransportClient client = new PreBuiltTransportClient(settings); //自动嗅探整个集群的状态,把集群中其他ES节点的ip添加到本地的客户端列表中 //Add transport addresses and do something with the client...
增加自动嗅探配置
Settings settings = Settings.builder() .put("client.transport.sniff", true).build(); TransportClient client = new PreBuiltTransportClient(settings);
其他配置
client.transport.ignore_cluster_name //设置 true ,忽略连接节点集群名验证 client.transport.ping_timeout //ping一个节点的响应时间 默认5秒 client.transport.nodes_sampler_interval //sample/ping 节点的时间间隔,默认是5s
对于ES Client,有两种形式,一个是TransportClient,一个是NodeClient。两个的区别为:
TransportClient作为一个外部访问者,通过HTTP去请求ES的集群,对于集群而言,它是一个外部因素。
NodeClient顾名思义,是作为ES集群的一个节点,它是ES中的一环,其他的节点对它是感知的,不像TransportClient那样,ES集群对它一无所知。NodeClient通信的性能会更好,但是因为是ES的一环,所以它出问题,也会给ES集群带来问题。NodeClient可以设置不作为数据节点,在elasticsearch.yml中设置,这样就不会在此节点上分配数据。
如果用ES的节点,仁者见仁智者见智。
实例
package name.quanke.es.study; import name.quanke.es.study.util.Utils; import org.elasticsearch.action.search.SearchResponse; import org.elasticsearch.client.transport.TransportClient; import org.elasticsearch.common.settings.Settings; import org.elasticsearch.common.transport.InetSocketTransportAddress; import org.elasticsearch.transport.client.PreBuiltTransportClient; import org.junit.After; import org.junit.Before; import java.net.InetAddress; /** * Elasticsearch 5.5.1 的client 和 ElasticsearchTemplate的初始化 * 作为一个外部访问者,请求ES的集群,对于集群而言,它是一个外部因素。 * Created by http://quanke.name on 2017/11/10. */ public class ElasticsearchClient { protected TransportClient client; @Before public void setUp() throws Exception { Settings esSettings = Settings.builder() .put("cluster.name", "utan-es") //设置ES实例的名称 .put("client.transport.sniff", true) //自动嗅探整个集群的状态,把集群中其他ES节点的ip添加到本地的客户端列表中 .build(); /** * 这里的连接方式指的是没有安装x-pack插件,如果安装了x-pack则参考{@link ElasticsearchXPackClient} * 1. java客户端的方式是以tcp协议在9300端口上进行通信 * 2. http客户端的方式是以http协议在9200端口上进行通信 */ client = new PreBuiltTransportClient(esSettings) .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("192.168.1.10"), 9300)); System.out.println("ElasticsearchClient 连接成功"); } @After public void tearDown() throws Exception { if (client != null) { client.close(); } } protected void println(SearchResponse searchResponse) { Utils.println(searchResponse); } }
本实例代码已经上传到 Git ElasticsearchClient.java
所有实例 已经上传到Git
XPackTransportClient
如果ElasticSearch服务安装了
x-pack插件,需要
PreBuiltXPackTransportClient实例才能访问
使用Maven管理项目,把下面代码增加到
pom.xml;
一定要修改默认仓库地址为https://artifacts.elastic.co/maven ,因为这个库没有上传到Maven中央仓库,如果有自己的 maven ,请配置代理
<project ...> <repositories> <!-- add the elasticsearch repo --> <repository> <id>elasticsearch-releases</id> <url>https://artifacts.elastic.co/maven</url> <releases> <enabled>true</enabled> </releases> <snapshots> <enabled>false</enabled> </snapshots> </repository> ... </repositories> ... <dependencies> <!-- add the x-pack jar as a dependency --> <dependency> <groupId>org.elasticsearch.client</groupId> <artifactId>x-pack-transport</artifactId> <version>5.6.3</version> </dependency> ... </dependencies> ... </project>
实例
/** * Elasticsearch XPack Client * Created by http://quanke.name on 2017/11/10. */ public class ElasticsearchXPackClient { protected TransportClient client; @Before public void setUp() throws Exception { /** * 如果es集群安装了x-pack插件则以此种方式连接集群 * 1. java客户端的方式是以tcp协议在9300端口上进行通信 * 2. http客户端的方式是以http协议在9200端口上进行通信 */ Settings settings = Settings.builder() .put("xpack.security.user", "elastic:utan100") .put("cluster.name", "utan-es") .build(); client = new PreBuiltXPackTransportClient(settings) .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("192.168.1.10"), 9300)); // final CredentialsProvider credentialsProvider = new BasicCredentialsProvider(); // credentialsProvider.setCredentials(AuthScope.ANY, // new UsernamePasswordCredentials("elastic", "utan100")); System.out.println("ElasticsearchXPackClient 启动成功"); } @Test public void testClientConnection() throws Exception { System.out.println("--------------------------"); } @After public void tearDown() throws Exception { if (client != null) { client.close(); } } protected void println(SearchResponse searchResponse) { Utils.println(searchResponse); } }
本实例代码已经上传到 Git ElasticsearchXPackClient.java
所有实例 已经上传到Git
更多请浏览 spring-boot-starter-es 开源项目
如何有任何问题请关注微信公众号给我留言
相关文章推荐
- Elasticsearch系列(五)----JAVA客户端之TransportClient操作详解
- Elasticsearch系列(十一)----Spring整合Elasticsearch5.5.1的TransportClient客户端
- elasticsearch java api 创建客户端连接(Transport Client)
- Java客户端连接elasticsearch5.5.3实现数据搜索(基于xpack安全管理)
- elasticsearch java api 创建客户端连接(Transport Client)
- elasticsearch 5.0 获取 TransportClient 操作客户端java API
- elasticsearch 5.0 获取 TransportClient 操作客户端java API
- Java客户端连接elasticsearch5.5.3实现数据搜索(基于xpack安全管理)
- 本机不安装Oracle客户端,使用PL/SQL Developer和 Instant Client 工具包连接oracle 11g远程数据库
- Elasticsearch - java客户端连接
- elasticsearch2.4.1 java api 创建连接
- oracle11g client+plsql客户端远程连接配置
- elasticsearch java客户端 - 原生esClient
- mysql客户端工具连接时出现: Client does not support authentication protocol 解决
- 使用Oracle绿色客户端(InstantClient)连接远程Oracle的配置方法
- elasticsearch 连接客户端
- 解决ASP.NET连接Oracle数据库提示"System.Data.OracleClient 需要 Oracle 客户端软件 8.1.7 或更高版本"
- linux 远程连接oracle 安装instantclient简易客户端
- Android httpclient如何让客户端提示服务器close连接
- 使用JestClient连接elasticsearch-5.x对数据进行分组聚合