Chạy Eureka Server của Netflix OSS sử dụng Spring Cloud Netflix

Mình đã giới thiệu với các bạn về Microservices và những lợi ích to lớn mà nó mang lại. Quá trình xây dựng một ứng dụng theo kiểu Microservices sẽ có nhiều thử thách và một trong những thử thách đó là làm thế nào quản lý các service được tạo ra, bao gồm việc bảo trì, mở rộng và khả năng high availability của chúng. Ứng dụng càng lớn thì việc quản lý các service này sẽ lại càng khó khăn hơn.

Để giải quyết vấn đề này, người ta đã giới thiệu một khái niệm gọi là Service registration and discovery, nhằm định nghĩa một server, nơi có thể dùng để cho các service đăng ký và quản lý thông tin của chúng.

Server này sẽ chịu trách nhiệm lưu trữ và cung cấp thông tin của các service trong một hệ thống Microservices. Khi một service đăng ký thông tin với server, nó sẽ cung cấp các thông tin như host, port, trạng thái của nó. Và nó cũng thường xuyên gửi heartbeat message để thông báo tình trạng của mình cho server. Do đó, server này có thể dễ dàng cung cấp thông tin về các service khi chúng được gọi tới từ các service khác.

Đây chính là những điểm cơ bản về Eureka Server của Netflix OSS (Open Source Software) mà mình muốn đề cập trong bài viết này đó các bạn!

Trong bài viết này, mình sẽ hướng dẫn các bạn cách setup để có thể chạy một Eureka Server sử dụng Spring Cloud Netflix các bạn nhé!

Đầu tiên, các bạn hãy tạo một Spring Boot project với Eureka Server dependency.

Kết quả của mình như sau:

Sau đó, các bạn hãy vào class main của ứng dụng Spring Boot của chúng ta, khai báo thêm một annotation tên là @EnableEurekaServer như sau:

Annotation @EnableEurekaServer sẽ giúp Spring Boot biết là chúng ta cần chạy một Eureka Server sử dụng Eureka Server của Netflix OSS, expose các endpoint để các service có thể đăng ký, discovery và gửi heartbeat.

Bây giờ thì chạy ứng dụng, request tới địa chỉ http://localhost:8080/, các bạn sẽ thấy kết quả như sau:

Trong phần “Instances currently registered with Eureka” sẽ chứa thông tin của tất cả các service đã đăng ký với Eureka Server này. Vì hiện tại chưa có service nào đăng ký nên các bạn sẽ không thấy gì ở đây cả.

Nếu các bạn để ý console log, các bạn sẽ thấy lỗi sau:

Nguyên nhân là bởi vì mặc định Eureka Server này cũng đóng vai trò như là một service, hay còn gọi là một Eureka Client. Eureka Client này sẽ tự động, cứ mỗi 30s, lại call tới địa chỉ http://localhost:8761/eureka/ để đăng ký chính nó với Eureka Server nếu nó chưa đăng ký được và để discover các service khác.

Lỗi ở trên xảy ra là bởi vì port mặc định của Eureka Server là 8761 nhưng ở đây, ứng dụng của mình đang sử dụng port mặc định của Tomcat là 8080. Khi gọi tới port 8761 sẽ bị lỗi.

Để fix lỗi này các bạn hãy cấu hình port cho giống với port mặc định của Eureka Server bằng cách thêm property server.port vào tập tin cấu hình của ứng dụng application.properties.

Chạy lại ứng dụng và đi đến địa chỉ http://localhost:8761/, các bạn sẽ thấy 1 service đã được đăng ký:

Service này chính là Eureka Server đó các bạn!

Nếu các bạn không muốn Eureka Server tự động đăng ký chính nó và discover các service khác, các bạn có thể disable cấu hình mặc định này bằng cách thêm 2 properties sau vào tập tin cấu hình của ứng dụng application.properties:

Khi đó, start lại ứng dụng, các bạn sẽ không thấy Eureka Server không tự động làm như thế nữa!

Như vậy là chúng ta đã setup thành công Eureka Server của Netflix OSS sử dụng Spring Cloud Netflix rồi đó các bạn!

Add Comment