High Level Rest Client 同步执行和异步执行介绍

2021-04-22 0 By admin

当Java 开发过程中使用High Level Rest Client(高级别Rest客户端)操作 Elasticsearch 集群时,可以选择同步执行或者异步执行查询请求。同步执行会阻塞当前执行的代码,而异步执行需要配置搜索监听器用于处理响应结果。

十、Synchronous execution 同步执行

在以下面的方式执行 SearchRequest 时,客户端在继续执行代码之前,会等待返回的SearchResponse:
SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);

同步调用可能会在高级REST客户端(high-level REST client)中解析REST响应失败、请求超时或服务器没有响应返回的类似情况下引发IOException。
在服务器返回4xx或5xx错误代码的情况下,高级客户端会尝试解析响应正文错误详细信息,然后抛出一个通用的 ElasticsearchException,并将原始 ResponseException 作为抑制的异常添加到其中。

十一、Asynchronous Execution 异步执行

执行 SearchRequest 也可以使用异步方式完成,这样客户端就继续往下执行代码。用户需要通过向异步搜索方法传递请求和侦听器来指定如何处理响应或潜在故障:
client.searchAsync(searchRequest, RequestOptions.DEFAULT, listener);

执行 SearchRequest 和执行完成时使用的ActionListener 处理响应。

异步方法不会阻塞,而是立即返回。一旦完成,如果执行成功完成,则使用 onResponse方法调用 ActionListener;如果执行失败,则使用onFailure方法调用它。失败场景和预期的异常与同步执行情况相同。

典型的搜索监听器是这样的:

ActionListener<SearchResponse> listener = new ActionListener<SearchResponse>() {
    @Override
    public void onResponse(SearchResponse searchResponse) {
        
    }
    @Override
    public void onFailure(Exception e) {
        
    }
};