前言
- 本篇文章是基于elasticsearch官网对于Java Low Level REST 客户端文档的解读
初始化
下图是Plumelog的Es客户端初始化的截图,以搞明白这里面的API操作含义去了解Es客户端的初始化
- 引入Maven依赖
<dependency> <groupId>org.elasticsearch.client</groupId> <artifactId>elasticsearch-rest-client</artifactId> <version>7.9.3</version> </dependency>
- 初始化
2.1 一个RestClient实例可以通过内置的RestClientBuilder类构建,通过RestClient#builder(HttpHost…)静态方法创建,唯一需要的参数是客户端将与之通信的一个或多个主机
2.2 设置允许修改默认请求配置的回调(例如请求超时、身份验证或org.apache.http.client.config.RequestConfig.Builder 允许设置的任何内容)RestClient restClient = RestClient.builder( new HttpHost("localhost", 9200, "http"), new HttpHost("localhost", 9201, "http")).build();
RestClientBuilder builder = RestClient.builder(new HttpHost("localhost", 9200, "http")); builder.setHttpClientConfigCallback(new HttpClientConfigCallback() { @Override public HttpAsyncClientBuilder customizeHttpClient( HttpAsyncClientBuilder httpClientBuilder) { return httpClientBuilder.setProxy(new HttpHost("proxy", 9000, "http")); } });
执行请求
下图是PlumeLog的ES查询方法
- 一旦RestClient被创建,请求可以通过调用发送performRequest或performRequestAsync请求
1.1 performRequest是同步的,将阻塞调用线程并Response在请求成功时返回或在失败时抛出异常
1.2 performAsync是异步的,并接收一个ResponseListener参数Request request = new Request( "GET", //HTTP方法(GET,POST,HEAD等) "/"); //服务器上的端点 Response response = restClient.performRequest(request);
Request request = new Request( "GET", "/"); Cancellable cancellable = restClient.performRequestAsync(request, new ResponseListener() { @Override public void onSuccess(Response response) { //处理响应 } @Override public void onFailure(Exception exception) { //处理失败 } });
- 向请求对象添加请求参数
request.addParameter("pretty", "true");
- 将请求体设置成任意的HttpEntity
request.setEntity(new NStringEntity( "{\"json\":\"text\"}", ContentType.APPLICATION_JSON));
读取响应
该Response对象包装由http客户端返回的响应对象并公开一些附加信息
Response response = restClient.performRequest(new Request("GET", "/"));
RequestLine requestLine = response.getRequestLine(); //有关已执行请求的信息
HttpHost host = response.getHost(); //返回响应的主机
int statusCode = response.getStatusLine().getStatusCode(); //响应状态行,例如您可以从中检索状态代码
Header[] headers = response.getHeaders(); //响应头,也可以通过名称检索 getHeader(String)
String responseBody = EntityUtils.toString(response.getEntity());//包含在org.apache.http.HttpEntity 对象中的响应主体