你不会是程序猿吧?

使用elasticsearch-rest-high-level-client 7.3.1版本的异步方法报错ConnectionClosedException

Elasticsearch | 作者 try2learn | 发布于2019年09月14日 | 阅读数:9562

服务端使用的是elasticsearch7.3.1版本,java端使用elasticsearch-rest-high-level-client 7.3.1版本的异步方法,例如:
indexAsync和getAsync。会报一下错误:
org.apache.http.ConnectionClosedException: Connection is closed
 at org.apache.http.impl.nio.NHttpConnectionBase.assertNotClosed(NHttpConnectionBase.java:502)
 at org.apache.http.impl.nio.DefaultNHttpClientConnection.submitRequest(DefaultNHttpClientConnection.java:320)
 at org.apache.http.nio.protocol.HttpAsyncRequestExecutor.requestReady(HttpAsyncRequestExecutor.java:211)
 at org.apache.http.nio.protocol.HttpAsyncRequestExecutor.connected(HttpAsyncRequestExecutor.java:134)
 at org.apache.http.impl.nio.client.InternalIODispatch.onConnected(InternalIODispatch.java:63)
 at org.apache.http.impl.nio.client.InternalIODispatch.onConnected(InternalIODispatch.java:39)
 at org.apache.http.impl.nio.reactor.AbstractIODispatch.connected(AbstractIODispatch.java:73)
 at org.apache.http.impl.nio.reactor.BaseIOReactor.sessionCreated(BaseIOReactor.java:246)
 at org.apache.http.impl.nio.reactor.AbstractIOReactor.processNewChannels(AbstractIOReactor.java:429)
 at org.apache.http.impl.nio.reactor.AbstractIOReactor.execute(AbstractIOReactor.java:287)
 at org.apache.http.impl.nio.reactor.BaseIOReactor.execute(BaseIOReactor.java:104)
 at org.apache.http.impl.nio.reactor.AbstractMultiworkerIOReactor$Worker.run(AbstractMultiworkerIOReactor.java:591)
 at java.base/java.lang.Thread.run(Thread.java:835)
 
 
而使用一些同步方法却不会报错,例如index和get。
这个是我调用indexAsync和getAsync方法的代码
    @Autowired
private final RestHighLevelClient client;

public void addBookAsync(Book book){
Map<String, Object> jsonMap = new HashMap<>();
jsonMap.put("type",book.getType());
jsonMap.put("word_count",book.getWordCount());
jsonMap.put("title",book.getTitle());
jsonMap.put("author",book.getAuthor());
jsonMap.put("publish_date",book.getPublishDate());
IndexRequest indexRequest = new IndexRequest("book").source(jsonMap);
client.indexAsync(indexRequest, RequestOptions.DEFAULT, new ActionListener<IndexResponse>() {
@Override
public void onResponse(IndexResponse indexResponse) {
System.out.println("He did it!");
}
@Override
public void onFailure(Exception e) {
e.printStackTrace();
}
});
}

public void getBookByIdAsync(String id){
GetRequest getRequest = new GetRequest("book",id);
client.getAsync(getRequest, RequestOptions.DEFAULT,
new ActionListener<GetResponse>() {

@Override
public void onResponse(GetResponse documentFields) {
if (documentFields.isExists()) {
System.out.println(documentFields.toString());
}
}

@Override
public void onFailure(Exception e) {
e.printStackTrace();
}
});
}
今天弄了一天都没弄明白是怎么回事,希望大家能帮到我,谢谢
已邀请:

regin

赞同来自:

解决了吗?

foresttiger

赞同来自:

因为是异步得,所以你测试得时候,还没修改完成你得程序都结束了。
请确保你调用这个方法得时候,整个程序没有结束。

要回复问题请先登录注册