Breeze · 6: RequestOptions: exploração do método de solicitação (síncrono/assíncrono) e lançamento de problema de método assíncrono

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.DEFAULThaverá 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( )方法里的逻辑不是也就不能走了)?
insira a descrição da imagem aqui

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

Acho que você gosta

Origin blog.csdn.net/stange1/article/details/130029732
Recomendado
Clasificación