Elasticsearch performRequestAsync如何将响应返回给上层调用者

时间:2017-06-29 04:45:47

标签: java elasticsearch

以下是我从Elasticsearch官方网站上复制的内容

" Response对象,由同步performRequest方法返回或作为ResponseListener#onSuccess(Response)中的参数接收,包装http客户端返回的响应对象"

https://www.elastic.co/guide/en/elasticsearch/client/java-rest/current/_reading_responses.html

以下是ElasticSearchService类中的异步函数     public void getAsyncRequest(String endpoint,Map params,HttpEntity entity){

    restClient.performRequestAsync("GET", endpoint, params, entity, new ResponseListener() {
        @Override
        public void onSuccess(Response response) {
            try {
                LOGGER.info(EntityUtils.toString(response.getEntity()));
            } catch (IOException e) {
                LOGGER.error(e.getMessage());
            }
        }
        @Override
        public void onFailure(Exception e) {
            LOGGER.error(e.getMessage());
        }
    });
}

以下是另一个班级。

public static void main(String[] args) {
    ElasticSearchService.getAsyncRequest(endpoint, params, entity);
}

所以我的问题是,当调用getAsyncRequestWithBody时,当它是onSuccess时,它将获得响应对象,但是如何将它返回给静态的调用者" main"功能

我没有弄清楚它是什么意思"包装http客户端返回的响应对象"

谢谢你的帮助。 leochung

1 个答案:

答案 0 :(得分:0)

在处理响应之前,您的Java代码很可能会退出。您可以使用RestClient.SyncResponseListener等待响应返回。

但是在这个例子中,你基本上没有从异步调用中获得任何东西。如果您的底层代码不支持它,您可以继续使用同步代码。