Diretório de artigos
1 RequestOptions: método de solicitação (síncrono/assíncrono)
1.1 Geração de problemas
Ao usar o cliente avançado ES para enviar uma solicitação ao servidor ES e usar o método de solicitação síncrona para criar a biblioteca de índices, há um trecho de código que se refere ao método de chamada síncrona após a referência e, é claro,
RequestOptions.DEFAULT
haverá chamadas assíncronas.
1.2 Análise do Problema
método de chamada | explicar |
---|---|
Sincronicamente | ① Ao executar IndexRequest de forma síncrona, o cliente deve aguardar o resultado IndexResponse retornado; ② Após receber o IndexResponse, o cliente pode continuar executando o código |
modo assíncrono | ① Ao executar IndexRequest de forma assíncrona, o cliente avançado não precisa esperar de forma síncrona pelo retorno do resultado da solicitação e pode retornar diretamente o resultado bem-sucedido da execução da interface assíncrona para o método de chamada da interface; ② Para processar o resultado da resposta retornado de forma assíncrona ou processar as informações de processamento causadas durante a execução da solicitação, o usuário precisa especificar o ouvinte ActionListener. Se a solicitação for executada com sucesso, o método onRespose() do ActionListener é chamado e, em seguida, o processamento lógico correspondente no método é executado; se a execução da solicitação falha, o onFailure() do ActionListener é chamado para o processamento lógico correspondente |
1.2.1 Método de sincronização
Sincronicamente:
restHighLevelClient.index(indexRequest, RequestOptions.DEFAULT);
1.2.1 Modo assíncrono
Modo assíncrono:
estHighLevelClient.indexAsync(indexRequest, RequestOptions.DEFAULT, actionListener);
1.3 Resolução de Problemas
1.3.1 Código do modo assíncrono
/**
* 向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);
}
1.3.2 Problema de código de modo assíncrono lançado
Durante a execução deste código, foram encontrados dois problemas:
① No final da execução do código, verificou-se que a biblioteca de índices no ES foi criada com sucesso
② Enquanto a biblioteca de índices foi criada com sucesso, verificou-se quecolheita séria: A execução foi bem-sucedida. Após o sucesso, a lógica entra no método onResponse ( ). É intrigante, por que结果却是走了onFailure( )失败的方法,报错说意外断开连接,难道这个方法就是如此吗(执行完断开连接,可是onResponse( )方法里的逻辑不是也就不能走了)?
1.3.2.1 Análise do problema de arremesso
Ideia: Olhe o código-fonte , 正在分析
se você tiver alguma ideia, deixe uma mensagem e discuta na área de comentários.
1.4 Referências
Combate avançado de operação de documento do cliente
ES 6: código-fonte restHighLevelClient