Đăng ký và discover các service khác trong Consul sử dụng Spring Cloud Consul

Trong bài viết trước, mình đã hướng dẫn các bạn cách đăng ký một service vào Consul sử dụng Consul API. Nếu ứng dụng của các bạn sử dụng Java và Spring framework thì các bạn cũng có thể làm điều này sử dụng Spring Cloud Consul. Chúng ta còn có thể discover thông tin các service khác sử dụng module Spring Cloud Consul này. Cụ thể như thế nào? Trong bài viết này, chúng ta sẽ cùng nhau tìm hiểu làm thế nào để connect tới Consul, lấy thông tin của các service đã đăng ký với Consul và gọi tới chúng, sử dụng Spring Cloud Consul các bạn nhé!

Đầu tiên, mình sẽ tạo mới một Spring Boot project với Spring Web, Actuator và Spring Cloud Consul Service Discovery như sau:

Spring Web để xây dựng ứng dụng web, Actuator là để expose healthcheck endpoint để Consul có thể healh check service đó các bạn!

Với cơ chế auto-configuration của Spring Cloud Consul Service Discovery, các bạn chỉ cần khai báo thông tin của Consul server trong tập tin cấu hình của Spring Boot:

là ứng dụng của chúng ta đã có thể connect tới Consul server, đăng ký và discover các service đã đăng ký bên trong Consul server này rồi.

Một lưu ý là các bạn cần khai báo property spring.application.name với tên của ứng dụng để Spring Cloud Consul sử dụng nó để đăng ký với Consul các bạn nhé! Và nếu service của các bạn deploy khác server với Consul, thì các bạn có thể sử dụng property spring.cloud.consul.discovery.hostname để khai báo thông tin server name, ví dụ như sau:

Tên của ứng dụng phải bắt đầu với một chữ cái, kết thúc với một chữ cái hoặc số và chúng ta chỉ sử dụng chữ cái, số hoặc dầu gạch ngang trong tên của ứng dụng.

Mặc định thì Spring Cloud Consul đăng ký health check endpoint sử dụng endpoint “/health” của Actuator nên các bạn cũng cần expose endpoint này nhé:

Nếu bây giờ, mình chạy ứng dụng ví dụ này rồi đi đến địa chỉ liệt kê danh sách các service đăng ký với Consul http://localhost:8500/ui/dc1/services, các bạn sẽ thấy kết quả như mình như sau:

huongdanjava-service là service mà mình đã đăng ký trong bài viết Đăng ký service với Consul sử dụng Consul API đó các bạn!

Như vậy là service của chúng ta đã đăng ký thành công với Consul rồi đó các bạn.

Các bạn có thể disable cơ chế auto đăng ký và discover các service khác sử dụng các properties sau:

Mặc định thì giá trị của các properties này là true các bạn nhé!

Để lấy thông tin của các registered service trong Consul, các bạn có thể sử dụng bean của class DiscoveryClient, ví dụ như sau:

Chạy ứng dụng ví dụ này, các bạn sẽ thấy kết quả như mình như sau:

Để lấy thông tin của một service và call tới nó, các bạn có thể sử dụng phương thức getInstances() của class DiscoveryClient. Tham số của phương thức getInstances() này là tên của service các bạn nhé! Thông tin trả về sẽ là danh sách các instance tương ứng của service này.

Ví dụ của mình như sau:

Kết quả:
Như vậy là chúng ta đã lấy được thông tin của các service được đăng ký trong Consul server rồi đó các bạn!

Add Comment