赞
踩
在使用ES高级客户端向ES服务器发送请求,使用同步请求方式创建索引库时,有段代码
RequestOptions.DEFAULT
,经查阅特指同步调用方式,当然会有异步调用。
调用方式 | 解释 |
---|---|
同步方式 | ① 以同步方式执行IndexRequest时,客户端必须等待返回结果IndexResponse;② 在收到IndexResponse后,客户端可继续执行代码 |
异步方式 | ① 以异步方式执行IndexRequest时,高级客户端不必同步等待请求结果的返回,可直接向接口调用方式返回异步接口执行成功结果;② 为处理异步返回的响应结果或处理请求执行过程中引发的处理信息,用户需指定监听器ActionListener,若请求执行成功,则调用ActionListener的onRespose()方法,然后执行方法里相应逻辑处理;若请求执行失败,则调用ActionListener的onFailure()进行相应逻辑处理 |
同步方式:
restHighLevelClient.index(indexRequest, RequestOptions.DEFAULT);
- 1
异步方式:
estHighLevelClient.indexAsync(indexRequest, RequestOptions.DEFAULT, actionListener);
- 1
/**
* 向es服务器发送请求,创建索引,请求方式:异步
*/
@Test
public void testCreateIndex2(){
//目标:向es服务器发送请求,创建索引,请求方式:异步
//1.创建request对象
IndexRequest indexRequest = new IndexRequest("hetol");
indexRequest.source(Constants.MAPPING,XContentType.JSON);
//3.通过ES高级客户端向ES服务器通信
ActionListener<IndexResponse> listener = new ActionListener<IndexResponse>() {
@Override
public void onResponse(IndexResponse indexResponse) {
System.out.println("执行成功");
}
@Override
public void onFailure(Exception e) {
System.out.println("执行失败"+e.getMessage());
}
};
client.indexAsync(indexRequest,RequestOptions.DEFAULT,listener);
}
在执行此代码过程中,发现有两点问题:
① 在代码执行结束,发现ES中索引库创建成功
② 在索引库创建成功的同时,发现严重作物:执行成功,可以成功后逻辑进入onResponse( )方法,百思不得其解,为什么结果却是走了onFailure( )失败的方法,报错说意外断开连接,难道这个方法就是如此吗(执行完断开连接,可是onResponse( )方法里的逻辑不是也就不能走了)?
思路:看源码,正在分析
,如有见解,欢迎评论区留言、探讨。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。