本文内容基本都是从官网文档整理而来,工作不易,转载请声明
概述
创建 RestClient 后就可以通过调用 performRequest 或 performRequestAsync 发送请求。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);
1247

被折叠的 条评论
为什么被折叠?



