Helpex - Trao đổi & giúp đỡ Đăng nhập

Cách sử dụng tính năng tự động khám phá Hazelcast với Eureka

Nguyễn Thanh Sơn
· 17:00 24/04/2019
19:35:07 15/06/2021

Hazelcast IMDG hỗ trợ tự động phát hiện cho nhiều môi trường khác nhau. Kể từ khi chúng tôi giới thiệu  SPI khám phá chung , rất nhiều plugin đã được phát triển để bạn có thể sử dụng Hazelcast liền mạch trên  KubernetesAWSAzureGCP , v.v. Nếu bạn cần một plugin tùy chỉnh, bạn cũng có thể tạo plugin của riêng mình.

Nếu cơ sở hạ tầng của bạn không dựa trên bất kỳ môi trường Đám mây phổ biến nào nhưng bạn vẫn muốn tận dụng khả năng khám phá động hơn là cấu hình IP tĩnh, bạn có thể thiết lập sổ đăng ký dịch vụ của mình. Một trong những lựa chọn phổ biến hơn, đặc biệt là trong thế giới microservice dựa trên JVM, là Eureka (ban đầu được phát triển bởi Netflix và bây giờ là một phần của Spring Cloud). Eureka tuân theo mô hình máy khách-máy chủ và bạn thường thiết lập một máy chủ (hoặc một cụm máy chủ để có tính khả dụng cao) và sử dụng máy khách để đăng ký và định vị dịch vụ.

Hazelcast có thể sử dụng Eureka để tự động khám phá nhờ vào  plugin Hazelcast Eureka . Bài đăng này trình bày hướng dẫn từng bước về cách thiết lập máy chủ Eureka của bạn và sử dụng nó để khám phá Hazelcast. Ví dụ, chúng tôi sử dụng một tình huống phổ biến trong đó chúng tôi nhúng Hazelcast vào một dịch vụ web Spring Boot (dịch vụ này không làm gì khác hơn là đặt và đọc các giá trị từ cụm Hazelcast). Mã nguồn cho ví dụ này được tìm thấy  ở đây .

Máy chủ Eureka

Để sử dụng tính năng khám phá Eureka, trước tiên bạn cần khởi động máy chủ Eureka. Trong các tình huống thực tế, bạn sẽ bắt đầu nhiều phiên bản để cung cấp tính khả dụng cao, nhưng đối với ví dụ này, một phiên bản localhost duy nhất là đủ tốt.

Máy chủ Eureka thường được triển khai dưới dạng ứng dụng Spring Boot; do đó, chỉ cần thêm các phụ thuộc Maven sau là đủ.

<dependencies>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
        <version>2.0.6.RELEASE</version>
    </dependency>
</dependencies>

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-dependencies</artifactId>
            <version>Finchley.SR2</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

Sau đó, lớp Ứng dụng khởi động mùa xuân chịu trách nhiệm khởi động máy chủ Eureka trông như sau.

@SpringBootApplication
@EnableEurekaServer
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

Điều cuối cùng còn thiếu là bootstrap.yaml cấu hình máy chủ  .

eureka: 
  client:
    registerWithEureka: false
    fetchRegistry: false
server:
  port: 8761

Với cấu hình như vậy, bạn có thể khởi động máy chủ Eureka như bất kỳ ứng dụng Spring Boot nào khác. Nếu bạn làm theo mã nguồn dành riêng cho bài đăng này, nó đủ để xây dựng dự án và khởi động máy chủ Eureka JAR.

mvn clean package
java -jar eureka-server/target/eureka-server-0.1-SNAPSHOT.jar

Bạn sẽ thấy rằng máy chủ Eureka đã khởi động chính xác bằng cách mở trình duyệt của bạn tại:  http: // localhost: 8761 .

Cách sử dụng tính năng tự động khám phá Hazelcast với Eureka

Khi máy chủ Eureka khởi động, chúng tôi sẵn sàng trình bày cách các cá thể Hazelcast có thể sử dụng nó để tự khám phá và tạo thành một cụm Hazelcast. Có ba trường hợp sử dụng khác nhau mà bạn có thể gặp phải khi thiết lập Hazelcast ở chế độ nhúng cùng với dịch vụ web Spring Boot của bạn:

  • Chỉ Hazelcast : Eureka chỉ được sử dụng để khám phá Hazelcast, nhưng không được sử dụng cho dịch vụ web
  • Hazelcast với một ứng dụng khách Eureka riêng biệt : Eureka được sử dụng cho cả Hazelcast và dịch vụ web, nhưng mỗi dịch vụ sử dụng một ứng dụng khách Eureka khác nhau
  • Hazelcast tái sử dụng Eureka Client (Siêu dữ liệu) : Eureka được sử dụng cho cả Hazelcast và dịch vụ web và cả hai đều chia sẻ cùng một ứng dụng Eureka

Hãy trình bày từng tình huống một.

Chỉ Hazelcast

Kịch bản đầu tiên là tình huống đơn giản nhất, và nó bao gồm trường hợp bạn không cần đăng ký ứng dụng Spring Boot của mình cùng một lúc.

Bạn cần thêm  hazelcast-eureka-one (và rõ ràng  hazelcast) plugin vào các phần phụ thuộc Maven của mình.

<dependency>
    <groupId>com.hazelcast</groupId>
    <artifactId>hazelcast</artifactId>
    <version>3.12</version>
</dependency>
<dependency>
    <groupId>com.hazelcast</groupId>
    <artifactId>hazelcast-eureka-one</artifactId>
    <version>1.1.1</version>
</dependency>

Sau đó, cấu hình Hazelcast trông như sau.

@Bean
public Config hazelcastConfig() {
    Config config = new Config();
    config.getNetworkConfig().getJoin().getMulticastConfig().setEnabled(false);
    config.getNetworkConfig().getJoin().getEurekaConfig()
          .setEnabled(true)
          .setProperty("self-registration", "true")
          .setProperty("namespace", "hazelcast");
    return config;
}

Bạn cũng cần phải định cấu hình các thuộc tính cụ thể của Máy khách Eureka trong  eureka-client.properties tệp.

hazelcast.shouldUseDns=false
hazelcast.name=hazelcast-only
hazelcast.serviceUrl.default=http://localhost:8761/eureka/

Với cấu hình như vậy, nếu bạn làm theo mã nguồn của chúng tôi, bạn có thể khởi động hai ứng dụng Spring Boot.

java -jar hazelcast-only/target/hazelcast-only-0.1-SNAPSHOT.jar --server.port=8081 --hazelcast.port=5703
java -jar hazelcast-only/target/hazelcast-only-0.1-SNAPSHOT.jar --server.port=8080 --hazelcast.port=5701

Bạn sẽ thấy trong nhật ký rằng các thành viên Hazelcast đã thành lập một cụm với nhau.

...
Members {size:2, ver:2} [
        Member [192.168.0.125]:5701 - e29accdc-5b84-4c03-801e-b0177a2befe3
        Member [192.168.0.125]:5703 - 60291603-164e-4c45-8e5d-6f7652dab930 this
]
...

Trong bảng điều khiển web Eureka, bạn sẽ thấy các HAZELCAST-ONLYmục nhập “ ” sau đây .

Cách sử dụng tính năng tự động khám phá Hazelcast với Eureka

Những gì bạn vừa định cấu hình là khám phá Hazelcast dựa trên Eureka đơn giản nhất! Một cấu hình như vậy là đủ tốt cho hầu hết các tình huống. Tuy nhiên, đôi khi bạn cần đăng ký cả ứng dụng của mình và Hazelcast trong Eureka. Hai phần tiếp theo dành riêng cho những tình huống như vậy. Nếu bạn không quan tâm đến việc khám phá phần dịch vụ web, bạn có thể bỏ qua những phần đó và chuyển sang phần tiếp theo và đọc về cách kiểm tra xem dịch vụ web có sử dụng phiên bản Hazelcast chính xác hay không.

Hazelcast với một khách hàng Eureka riêng biệt

Nếu bạn muốn đăng ký ứng dụng của mình trong Eureka cùng với Hazelcast, thì cách đơn giản nhất là sử dụng các ứng dụng khách Eureka khác nhau. Sau đó, Hazelcast được đăng ký riêng và hiển thị trong Eureka dưới dạng một ứng dụng khác.

Để đạt được hiệu ứng này, cấu hình Hazelcast của bạn hoàn toàn giống như ở điểm trước, nhưng bạn cần thêm cấu hình Eureka Client cho ứng dụng Spring Boot của mình. Bạn có thể làm điều đó bằng cách thêm  @EnableDiscoveryClient vào Application lớp chính của mình  và xác định bootstrap.properties tệp sau  .

spring.application.name=spring-boot-application

Trong trường hợp này, Hazelcast sẽ được đăng ký dưới tên “ HAZELCAST-SEPARATE-CLIENT” và ứng dụng sẽ được đăng ký dưới tên “ SPRING-BOOT-APPLICATION“.

Với cấu hình này, nếu bạn làm theo mã nguồn của chúng tôi, bạn có thể khởi động hai ứng dụng Spring Boot.

java -jar hazelcast-separate-client/target/hazelcast-separate-client-0.1-SNAPSHOT.jar --server.port=8081 --hazelcast.port=5703
java -jar hazelcast-separate-client/target/hazelcast-separate-client-0.1-SNAPSHOT.jar --server.port=8080 --hazelcast.port=5701

Các thành viên Hazelcast nên tạo thành một cụm với nhau như trong phần trước và bạn sẽ thấy hai mục nhập riêng biệt trong bảng điều khiển web Eureka.

Cách sử dụng tính năng tự động khám phá Hazelcast với Eureka

Một lần nữa, bạn đã tạo một cụm Hazelcast bằng cách sử dụng sổ đăng ký dịch vụ Eureka! Trong phần tiếp theo, chúng tôi khám phá tùy chọn cuối cùng, đó là khi bạn muốn phiên bản và ứng dụng Hazelcast của mình được đăng ký làm một ứng dụng khách Eureka. Vui lòng bỏ qua phần này nếu nó không được bạn quan tâm và chuyển thẳng sang phần tiếp theo.

Hazelcast Tái sử dụng Eureka Client (Siêu dữ liệu)

Bạn có thể không muốn đăng ký Hazelcast như một mục nhập riêng trong Eureka. Rốt cuộc, Hazelcast không phải là một ứng dụng riêng biệt, mà là một thư viện được nhúng bên trong ứng dụng Spring Boot của bạn. Trong trường hợp như vậy, plugin Eureka cung cấp giải pháp lưu trữ thông tin về Hazelcast  host và  port trong Siêu dữ liệu Eureka. Sau đó, bạn có thể sử dụng lại cùng một ứng dụng khách Eureka cho ứng dụng và Hazelcast.

Thay đổi cấu hình Hazelcast của bạn để bao gồm các thuộc tính liên quan đến siêu dữ liệu.

@Bean
public Config hazelcastConfig(EurekaClient eurekaClient) {
    EurekaOneDiscoveryStrategyFactory.setEurekaClient(eurekaClient);
    Config config = new Config();
    config.getNetworkConfig().getJoin().getMulticastConfig().setEnabled(false);
    config.getNetworkConfig().getJoin().getEurekaConfig()
          .setEnabled(true)
          .setProperty("self-registration", "true")
          .setProperty("namespace", "hazelcast")
          .setProperty("use-metadata-for-host-and-port", "true");
    return config;
}

Với cấu hình như vậy, nếu bạn làm theo mã nguồn của chúng tôi, bạn có thể khởi động hai ứng dụng Spring Boot.

java -jar hazelcast-metadata/target/hazelcast-metadata-0.1-SNAPSHOT.jar --server.port=8081 --hazelcast.port=5703
java -jar hazelcast-metadata/target/hazelcast-metadata-0.1-SNAPSHOT.jar --server.port=8080 --hazelcast.port=5701

Các thành viên Hazelcast nên tạo thành một cụm với nhau như trong phần trước và bạn cũng sẽ thấy hai mục nhập riêng biệt trong bảng điều khiển web Eureka.

Cách sử dụng tính năng tự động khám phá Hazelcast với Eureka

Một lần nữa, bạn đã quản lý để định cấu hình khám phá Hazelcast bằng plugin Eureka thành công. Bây giờ chúng ta hãy xem cách xác minh rằng ứng dụng sử dụng Hazelcast một cách chính xác.

Xác minh cấu hình

Bất kể bạn đã làm theo cấu hình nào, bạn sẽ phải hình thành cụm Hazelcast của mình. Nếu bạn đã làm theo mã nguồn của chúng tôi, thì mỗi phiên bản Hazelcast được nhúng vào một dịch vụ web với một vài điểm cuối dành riêng để hoạt động trên dữ liệu Hazelcast. Chúng tôi sẽ sử dụng hai trong số các điểm cuối này để kiểm tra xem Hazelcast có hoạt động chính xác hay không:

  • /put: chèn một mục nhập khóa-giá trị vào Hazelcast
  • /get: đọc một giá trị từ Hazelcast bằng phím

Trước tiên, hãy thêm một mục nhập khóa-giá trị vào dịch vụ web đầu tiên.

curl http://localhost:8080/put?key=some-key\&value=some-value

Sau đó, chúng ta có thể đọc giá trị từ dịch vụ web thứ hai.

curl http://localhost:8081/get?key=some-key
{"response":"some-value"}

Chúng tôi đã nhận được giá trị mong đợi từ dịch vụ thứ hai, có nghĩa là các dịch vụ hoạt động chính xác và các phiên bản Hazelcast được nhúng đã tạo thành một cụm với nhau.

Phần kết luận

Đó là nó! Chúng ta vừa xem cách định cấu hình tính năng tự động khám phá Hazelcast bằng Eureka theo ba cách khác nhau. Phương pháp được sử dụng tùy thuộc vào nhu cầu của bạn và các quy ước được áp dụng trong dự án. Cái hay của Eureka là bạn không phải ràng buộc mình với bất kỳ môi trường cụ thể nào như AWS, GCP hoặc Kubernetes. Đúng là bạn cần một số cấu hình bổ sung, nhưng sổ đăng ký dịch vụ của bạn là riêng biệt và sẵn sàng triển khai ở mọi nơi. Hơn nữa, Eureka được tích hợp tốt vào Spring Boot framework, vì vậy nếu đó là framework bạn lựa chọn, cấu hình chỉ đơn giản bằng một vài dòng mã.

9 hữu ích 0 bình luận 11k xem chia sẻ

Có thể bạn quan tâm