Discovery các service khác trong Eureka Server sử dụng Discovery Client, với Spring Cloud Netflix

Trong các bài viết trước, mình đã giới thiệu với các bạn về Eureka Server để quản lý các service trong một hệ thống Microservices và làm cách nào để đăng ký các service này với Eureka Server sử dụng Spring Cloud Netflix. Trong bài viết này, mình sẽ hướng dẫn các bạn cách để một service có thể tìm kiếm thông tin của các service khác trong một Eureka Server, các bạn nhé!

Để làm ví dụ cho bài viết này, mình sẽ sử dụng Eureka Server mà mình đã tạo sử dụng Spring Cloud Netflix trong bài viết trước về Eureka Server cùng với một service mà mình đã tạo trong bài viết về Eureka Client. Giao diện của Eureka Server hiện tại như sau:

Discovery các service khác trong Eureka Server sử dụng Discovery Client, với Spring Cloud Netflix

Bây giờ, mình sẽ tạo một service khác với Eureka Client dependencies như sau:

Discovery các service khác trong Eureka Server sử dụng Discovery Client, với Spring Cloud Netflix

Kết quả:

Discovery các service khác trong Eureka Server sử dụng Discovery Client, với Spring Cloud Netflix

Để có thể tìm kiếm thông tin của các service khác trong một Eureka Server, đầu tiên, các bạn cần đăng ký service này với Eureka Server trước. Các bước mình đã hướng dẫn trong bài viết này, nếu bạn nào chưa biết thì có thể tham khảo nhé. Đối với service mà mình mới tạo ở trên, mình sẽ làm như sau:

SpringCloudDiscoveryApplication:

application.properties:

Bởi vì, ví dụ trong bài viết Đăng ký các service với Eureka Server sử dụng Eureka Client, với Spring Cloud Netflix đã chạy với port 8080 rồi nên như các bạn thấy, mình đã đổi port mặc định của Tomcat bằng cách sử dụng property server.port của Spring Boot.

Bây giờ, nếu mình chạy ví dụ này lên, giao diện của Eureka Server lúc này sẽ như sau:

Discovery các service khác trong Eureka Server sử dụng Discovery Client, với Spring Cloud Netflix

Như các bạn thấy, đến đây thì chúng ta đã đăng ký được 2 service trong một Eureka Server rồi. Vậy làm thế nào để từ service trong bài viết này, chúng ta có thể tìm kiếm thông tin của service “Eureka Client Example”, các bạn hãy đọc tiếp nhé!



Bây giờ mình sẽ tạo mới một Controller để dễ minh hoạ. Controller này sẽ có một request giúp người dùng có thể lấy thông tin về host, port của service “Eureka Client Example” từ service này “Discovery Example”.

Nội dung ban đầu của Controller này như sau:

Để lấy thông tin về host, port của service “Eureka Client Example”, chúng ta sẽ sử dụng interface org.springframework.cloud.client.discovery.DiscoveryClient với phương thức getInstances(). Tham số của phương thức này là serviceId, đó là tên của service được đăng ký trong Eureka Server đó các bạn. Cụ thể code lúc này của DiscoveryController sẽ như sau:

với “Eureka Client Example” là tên của service mà chúng ta đang cần tìm kiếm thông tin. Chúng ta có thể đăng ký nhiều service cùng tên nên giá trị trả về sẽ là một danh sách, và class ServiceInstance chính là class nắm giữ thông tin của những service này.

Bởi vì hiện tại mình chỉ đăng ký một service với tên là “Eureka Client Example” nên mình sẽ code như sau:

để lấy thông tin về host, port của service này.

Các bạn cũng có thể viết gọn lại như sau:

Kết quả:

Discovery các service khác trong Eureka Server sử dụng Discovery Client, với Spring Cloud Netflix

Như các bạn thấy, thông tin về host port của service “Eureka Client Example”, từ những thông tin này các bạn có thể request tới service này để thực hiện nhu cầu của mình. Cũng bởi vì thông tin host port do Eureka Server quản lý nên nếu sau này, service này được deploy lên một server khác đi nữa thì chúng ta cũng ko cần sửa thông tin đó trên service của chúng ta. Mọi thứ sẽ được cập nhập trong Eureka Server và chúng ta không cần làm gì cả.

5/5 - (4 bình chọn)

2 thoughts on “Discovery các service khác trong Eureka Server sử dụng Discovery Client, với Spring Cloud Netflix

Add Comment