Elasticsearch客户端transport vs rest

灰太狼 2023-06-06 03:42 70阅读 0赞

Elasticsearch(ES)有两种连接方式:transport、rest。transport通过TCP方式访问ES(只支持java),rest方式通过http API 访问ES(没有语言限制)。

Transport

  • 引入maven依赖


    org.elasticsearch.client
    transport
    ${elasticsearch.version}
  • 创建transport client(5.x&6.X版本ES)

    import org.elasticsearch.client.transport.TransportClient;
    import org.elasticsearch.common.settings.Settings;
    import org.elasticsearch.common.transport.InetSocketTransportAddress;
    import org.elasticsearch.transport.client.PreBuiltTransportClient;

    Settings settings = Settings.builder()
    .put(“cluster.name”, “myClusterName”)
    .put(“client.transport.sniff”, true)
    .build();
    TransportClient client = new PreBuiltTransportClient(settings)

    1. .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("host1"), 9300));

设置client.transport.sniff为true来使客户端去嗅探整个集群的状态,把集群中其它机器的ip地址加到客户端中,这样做的好处是一般你不用手动设置集群里所有集群的ip到连接客户端,它会自动帮你添加,并且自动发现新加入集群的机器。

rest(已引入transport不能够再引入 rest,包会发生冲突)

官方提供low-level rest client(支持5.0及以后版本) 和high-level rest client(支持版本为 5.6及以后版本)

low-level rest client

  • 引入maven依赖


    org.elasticsearch.client
    elasticsearch-rest-client
    6.5.4

    org.elasticsearch.client
    rest
    5.3.2
  • 创建rest client

    Header[] defaultHeaders = new Header[] { new BasicHeader(“header”, “value”) };
    RestClient restClient = RestClient.builder(

    1. new HttpHost("localhost", 9200, "http"))
    2. .setDefaultHeaders(defaultHeaders) //设置默认标头
    3. .setMaxRetryTimeoutMillis(10000) //同一请求重试超时时间,默认30s
    4. .setFailureListener(new RestClient.FailureListener() {
    5. }) //设置侦听器,节点出现故障会收到通知
    6. .setHttpClientConfigCallback(new RestClientBuilder.HttpClientConfigCallback() {
    7. @Override
    8. public HttpAsyncClientBuilder customizeHttpClient(HttpAsyncClientBuilder httpClientBuilder) {
    9. CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
    10. //create the authentication scope
    11. AuthScope authScope = new AuthScope(AuthScope.ANY_HOST, AuthScope.ANY_PORT, AuthScope
    12. .ANY_REALM);
    13. // Create credential pair(username,password)
    14. UsernamePasswordCredentials usernamePasswordCredentials = new UsernamePasswordCredentials("username", "password");
    15. credentialsProvider.setCredentials(authScope, usernamePasswordCredentials);
    16. return httpClientBuilder.setKeepAliveStrategy(new ConnectionKeepAliveStrategy() {
    17. @Override
    18. public long getKeepAliveDuration(HttpResponse response, HttpContext context) {
    19. return 30 * 1000;
    20. }
    21. }).setDefaultCredentialsProvider(credentialsProvider);
    22. }
    23. })
    24. .setRequestConfigCallback(new RestClientBuilder.RequestConfigCallback() {
    25. @Override
    26. public RequestConfig.Builder customizeRequestConfig(RequestConfig.Builder requestConfigBuilder) {
    27. return requestConfigBuilder.setSocketTimeout(10000);
    28. }
    29. })
    30. .build();

high level rest client

  • 引入maven依赖


    org.elasticsearch.client
    rest
    ${elasticsearch.version}
  • 创建rest client

    RestHighLevelClient client = new RestHighLevelClient(
    RestClient.builder(new HttpHost(“localhost”, 9200, “http”)));

ES官方建议使用rest方式, transport 将计划在后面的版本中废弃。

发表评论

表情:
评论列表 (有 0 条评论,70人围观)

还没有评论,来说两句吧...

相关阅读