资讯专栏INFORMATION COLUMN

Elasticsearch Java Low Level REST Client(执行请求)

Code4App / 1158人阅读

摘要:执行请求一旦创建了,就可以通过调用或来发送请求,是同步的,将阻塞调用线程并在请求成功时返回,如果失败则抛出异常。自定义响应消费者。处理返回的响应。由于通信错误或带有指示错误的状态码的响应,处理返回的异常。

执行请求

一旦创建了RestClient,就可以通过调用performRequestperformRequestAsync来发送请求,performRequest是同步的,将阻塞调用线程并在请求成功时返回Response,如果失败则抛出异常。performRequestAsync是异步的,它接受一个ResponseListener参数,它在请求成功时调用Response,如果失败则调用Exception

这是同步的:

</>复制代码

  1. Request request = new Request(
  2. "GET",
  3. "/");
  4. Response response = restClient.performRequest(request);

第一个参数:HTTP方法(GETPOSTHEAD等)。

第二个参数:服务器上的端点。

这是异步的:

</>复制代码

  1. Request request = new Request(
  2. "GET",
  3. "/");
  4. restClient.performRequestAsync(request, new ResponseListener() {
  5. @Override
  6. public void onSuccess(Response response) {
  7. }
  8. @Override
  9. public void onFailure(Exception exception) {
  10. }
  11. });

onSuccess方法:处理响应。

onFailure:处理失败。

你可以将请求参数添加到请求对象:

</>复制代码

  1. request.addParameter("pretty", "true");

你可以将请求的body设置为任何HttpEntity

</>复制代码

  1. request.setEntity(new NStringEntity(
  2. "{"json":"text"}",
  3. ContentType.APPLICATION_JSON));

</>复制代码

  1. HttpEntity指定的ContentType很重要,因为它将用于设置Content-Type header,以便Elasticsearch可以正确解析内容。

你还可以将其设置为String,默认为ContentTypeapplication/json

</>复制代码

  1. request.setJsonEntity("{"json":"text"}");
RequestOptions

RequestOptions类保存应在同一应用程序中的多个请求之间共享的部分请求,你可以创建单例实例并在所有请求之间共享它:

</>复制代码

  1. private static final RequestOptions COMMON_OPTIONS;
  2. static {
  3. RequestOptions.Builder builder = RequestOptions.DEFAULT.toBuilder();
  4. builder.addHeader("Authorization", "Bearer " + TOKEN);
  5. builder.setHttpAsyncResponseConsumerFactory(
  6. new HeapBufferedResponseConsumerFactory(30 * 1024 * 1024 * 1024));
  7. COMMON_OPTIONS = builder.build();
  8. }

builder.addHeader:添加所有请求所需的任何header。

builder.setHttpAsyncResponseConsumerFactory:自定义响应消费者。

addHeader用于授权或在Elasticsearch前使用代理所需的header,无需设置Content-Type header,因为客户端将自动从附加到请求的HttpEntity设置该header。

你可以设置NodeSelector来控制哪些节点将接收请求。

NodeSelector.NOT_MASTER_ONLY是一个不错的选择。

你还可以自定义用于缓冲异步响应的响应消费者,默认消费者将在JVM堆上缓冲最多100MB的响应,如果响应较大,则请求将失败。例如,如果你在堆约束环境(如上面的例子)中运行,则可以降低可能有用的最大大小。

创建单例后,你可以在发出请求时使用它:

</>复制代码

  1. request.setOptions(COMMON_OPTIONS);

你还可以根据请求自定义这些选项,例如,这会添加额外的header:

</>复制代码

  1. RequestOptions.Builder options = COMMON_OPTIONS.toBuilder();
  2. options.addHeader("cats", "knock things off of other things");
  3. request.setOptions(options);
多个并行异步操作

客户端很乐意并行执行许多操作,以下示例并行索引许多文档,在现实世界的场景中,你可能希望使用_bulk API,但示例是作例证的。

</>复制代码

  1. final CountDownLatch latch = new CountDownLatch(documents.length);
  2. for (int i = 0; i < documents.length; i++) {
  3. Request request = new Request("PUT", "/posts/doc/" + i);
  4. //let"s assume that the documents are stored in an HttpEntity array
  5. request.setEntity(documents[i]);
  6. restClient.performRequestAsync(
  7. request,
  8. new ResponseListener() {
  9. @Override
  10. public void onSuccess(Response response) {
  11. latch.countDown();
  12. }
  13. @Override
  14. public void onFailure(Exception exception) {
  15. latch.countDown();
  16. }
  17. }
  18. );
  19. }
  20. latch.await();

onSuccess:处理返回的响应。

onFailure:由于通信错误或带有指示错误的状态码的响应,处理返回的异常。

上一篇:初始化 下一篇:读取响应

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/71923.html

相关文章

  • Elasticsearch Java REST Client(目录)

    摘要:用于的官方高级别客户端,基于低级别客户端,它公开特定的方法,并负责请求编组和响应反编组。入门初始化执行请求读取响应日志记录通用配置嗅探器在中被添加。依赖于核心项目,它接受与相同的请求参数,并返回相同的响应对象。 Elasticsearch Java REST Client Java REST Client有两种类型: Java Low Level REST Client:用于Elast...

    roland_reed 评论0 收藏0
  • Elasticsearch Java Low Level REST Client(读取响应)

    摘要:读取响应对象由同步方法返回或作为中的参数接收,它包装客户端返回的响应对象并公开一些其他信息。有关执行的请求的信息。返回响应的主机。响应体包含在对象中。对于返回状态码的请求,不会抛出,因为它是一个预期的响应,仅表示找不到该资源。 读取响应 Response对象由同步performRequest方法返回或作为ResponseListener#onSuccess(Response)中的参数接...

    wangxinarhat 评论0 收藏0
  • Elasticsearch Java Low Level REST Client(初始化)

    摘要:设置在多次尝试同一请求时应该遵守的超时,默认值为秒,与默认超时相同。如果自定义超时,则应相应地调整最大重试超时。设置一个监听器,每次节点出现故障时都会收到通知,以防需要采取措施,当启用故障嗅探时在内部使用。 初始化 可以通过相应的RestClientBuilder类构建RestClient实例,通过RestClient#builder(HttpHost...)静态方法创建,唯一必需的参...

    BWrong 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<