+1

[Elasticsearch - Java] Java Client API (transport client)

Từ những phiên bản đầu tiên, Elasticsearch đã cung cấp một Java Client API chuyên dụng (còn gọi là transport client). API này giao tiếp với Elasticsearch cluster thông qua native transport protocol và yêu cầu phiên bản của thư viện client phải khớp với phiên bản của Elasticsearch distribution mà bạn đang sử dụng (lý tưởng nhất là cùng một phiên bản).

Vì trong hướng dẫn này chúng ta sử dụng Elasticsearch 5.2.0, nên chúng ta sẽ thêm dependency tương ứng vào tệp pom.xml:

<dependency>
    <groupId>org.elasticsearch.client</groupId>
    <artifactId>transport</artifactId>
    <version>5.2.0</version>
</dependency>

Cấu Hình Transport Client Trong Spring Framework

Nếu bạn đang sử dụng Spring Framework, bạn chỉ cần cấu hình một TransportClient bean, như sau:

@Configuration
public class ElasticsearchClientConfiguration {
    
    @Bean(destroyMethod = "close")
    TransportClient transportClient() throws UnknownHostException {
        return new PreBuiltTransportClient(
            Settings.builder()
                .put(ClusterName.CLUSTER_NAME_SETTING.getKey(), "es-catalog")
                .build()
        ).addTransportAddress(new InetSocketTransportAddress(
            InetAddress.getByName("localhost"), 9300
        ));
    }
}

Lưu ý rằng giá trị của CLUSTER_NAME_SETTING phải khớp chính xác với tên của Elasticsearch cluster mà bạn đang kết nối (trong trường hợp này là "es-catalog").

Sau khi TransportClient đã được khởi tạo, bạn có thể sử dụng Spring Dependency Injection để truy cập nó trong các thành phần khác của ứng dụng:

@Autowired
private TransportClient client;

Giao Tiếp Với Elasticsearch Bằng Transport Client

Transport Client cung cấp một loạt phương thức mạnh mẽ để truy cập các API của Elasticsearch theo phong cách fluent interface.

Ví dụ, kiểm tra tình trạng của cluster:

final ClusterHealthResponse response = client
    .admin()
    .cluster()
    .health(
        Requests.clusterHealthRequest()
            .waitForGreenStatus()
            .timeout(TimeValue.timeValueSeconds(5))
    )
    .actionGet();

assertThat(response.isTimedOut())
    .withFailMessage("The cluster is unhealthy: %s", response.getStatus())
    .isFalse();

Ở đây, chúng ta yêu cầu Elasticsearch cluster trả về trạng thái health của nó, đồng thời chờ tối đa 5 giây để nó trở về trạng thái "green".


Asynchronous Execution

Các API của Elasticsearch Java Client được thiết kế để hỗ trợ asynchronous execution, với hai lớp quan trọng:

  • ActionFuture<?>: Tương tự như Java Future<?>, nhưng có thêm một số phương thức hữu ích.
  • ListenableActionFuture<?>: Cho phép đăng ký callbacks để xử lý kết quả ngay khi nó sẵn sàng.

Bạn có thể chọn kiểu nào tùy theo nhu cầu của ứng dụng.

Ví dụ, sử dụng prepareHealth() thay vì clusterHealthRequest():

final ClusterHealthResponse response = client
    .admin()
    .cluster()
    .prepareHealth()
    .setWaitForGreenStatus()
    .setTimeout(TimeValue.timeValueSeconds(5))
    .execute()
    .actionGet();

Tóm Lược

  • Elasticsearch Java Client API cung cấp cách mạnh mẽ để giao tiếp với Elasticsearch cluster.
  • Spring Framework giúp dễ dàng cấu hình và quản lý Transport Client.
  • Có thể sử dụng synchronous hoặc asynchronous execution tùy theo nhu cầu.

Trong phần tiếp theo, chúng ta sẽ khám phá Java REST Client, một lựa chọn thay thế không phụ thuộc vào phiên bản của Elasticsearch! 🚀


All rights reserved

Bình luận

Đang tải thêm bình luận...
Avatar
+1
Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí