【Elasticsearch】使用 PerformRequest 实现 kibana 开发控制台基础效果


本文内容基本都是从官网文档整理而来,工作不易,转载请声明


概述

创建 RestClient 后就可以通过调用 performRequestperformRequestAsync 发送请求。performRequest同步的,当请求成功时将阻塞调用线程并返回响应,如果请求失败则抛出异常。performRequestAsync异步的,它接受一个 ResponseListener 参数,当请求成功时,它会用一个响应调用这个参数,如果请求失败,它会用一个异常调用这个参数。


调用方式

在调用方法之前需要先连接 es

// 如果 es 没有配置用户名和密码就不需要这一步
BasicCredentialsProvider provider = new BasicCredentialsProvider();
provider.setCredentials(AuthScope.ANY, new UsernamePasswordCredentials("username", "password"));

RestClientBuilder clientBuilder = RestClient.builder(new HttpHost(ip, port, "http"))
	.setHttpClientConfigCallback(httpAsyncClientBuilder -> // 同理,没有配置用户名和密码就不需要这一步
	{
    httpAsyncClientBuilder.disableAuthCaching();
    return httpAsyncClientBuilder.setDefaultCredentialsProvider(provider);
	});
RestClient restClient = clientBuilder.build();

 

同步

Request request = new Request(
    "GET",  // HTTP 方法( GET 、POST 、HEAD 等)
    "/");   // endpoint
Response response = restClient.performRequest(request);

 

异步

Request request = new Request(
    "GET",  // HTTP 方法( GET 、POST 、HEAD 等)
    "/");   // endpoint
Cancellable cancellable = restClient.performRequestAsync(request,
    new ResponseListener() {
        @Override
        public void onSuccess(Response response) {
            // 处理成功响应时的情况
        }

        @Override
        public void onFailure(Exception exception) {
            // 处理异常时的情况
        }
});

 

添加 request 参数

request.addParameter("pretty", "true");

 

添加请求主体(boby)

可以将请求的主体设置为任何 HttpEntity。

request.setEntity(new NStringEntity(
        "{\"json\":\"text\"}",
        ContentType.APPLICATION_JSON));

注意:为 HttpEntity 指定的 ContentType 很重要,因为它将用于设置内容类型头,以便 Elasticsearch 能够正确地解析内容。
另外,也可以直接设置 json 类型的 Entity。

request.setJsonEntity("{\"json\":\"text\"}");

RequestOptions

RequestOptions 类包含请求的一些部分,这些部分应该在同一个应用程序中的多个请求之间共享。你可以创建一个单例实例并在所有请求之间共享它。
 

调用方式

private static final RequestOptions COMMON_OPTIONS;
static {
    RequestOptions.Builder builder = RequestOptions.DEFAULT.toBuilder();
    builder.addHeader("Authorization", "Bearer " + TOKEN); // 添加所有请求需要的任何 header
    builder.setHttpAsyncResponseConsumerFactory(           // 自定义 response 使用者
        new HttpAsyncResponseConsumerFactory
            .HeapBufferedResponseConsumerFactory(30 * 1024 * 1024 * 1024));
    COMMON_OPTIONS = builder.build();
}

addHeader 用于需要进行授权或在 Elasticsearch 前使用代理的 header,不需要设置 Content-Type 头,因为 client 将从附加到请求的 HttpEntity 自动设置它。
还可以设置 NodeSelector ,它可以控制选择哪些节点用来接收请求。NodeSelector.SKIP_DEDICATED_MASTERS 是一个不错的选择。
另外还可以定制用于缓冲异步响应的 response 使用者。默认使用者将在 JVM 堆上缓冲最多 100MB 的响应。如果响应较大,则请求将失败。例如,如果您运行在像上面示例那样的堆受限的环境中时可以降低缓冲最大值,这可能很有用。
一旦创建了单例后就可以在请求时使用了:

request.setOptions(COMMON_OPTIONS);

您还可以根据每个请求定制这些选,比如这样:

RequestOptions.Builder options = COMMON_OPTIONS.toBuilder();
options.addHeader("cats", "knock things off of other things");  // 添加了一个额外的 header
request.setOptions(options);

实例

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值