阻塞式和异步式客户端

编辑

API 客户端有两种类型:阻塞式和异步式。异步式客户端上的所有方法都返回标准的CompletableFuture

根据您的需要,这两种类型可以同时使用,它们共享相同的传输对象。

ElasticsearchTransport transport = ...

// Synchronous blocking client
ElasticsearchClient client = new ElasticsearchClient(transport);

if (client.exists(b -> b.index("products").id("foo")).value()) {
    logger.info("product exists");
}

// Asynchronous non-blocking client
ElasticsearchAsyncClient asyncClient =
    new ElasticsearchAsyncClient(transport);

asyncClient
    .exists(b -> b.index("products").id("foo"))
    .whenComplete((response, exception) -> {
        if (exception != null) {
            logger.error("Failed to index", exception);
        } else {
            logger.info("Product exists");
        }
    });

虽然我们不会深入探讨 Java 中的异步编程细节,但请记住要处理异步任务的失败。忽略它们很容易导致错误被忽视。

上述示例的源代码可以在 Java API 客户端测试 中找到。