Go-micro  sử dụng Consul để Discovery System. Mọi method sử dụng trong hệ thống được định nghĩa, khai báo và quản lý trên Consul, tạo nên một mạng lưới nhất quán, đồng bộ.

 

Khởi động nhanh một consul agent với câu lệnh:

consul agent -dev

 

Câu lệnh trên để thực hiện một Consul agent nhanh, cho phép một máy chủ đồng bộ có thể phát triển dựa trên các mẫu proto có sẵn hoặc dựa trên API. Nó không ghi bất cứ thứ gì vào ổ đĩa nên không dành cho xây dựng hệ thống.

Agent - Là một deamon chạy trên tất cả các thành viên của Consul Cluster. Có thể chạy ở chế độ server hoặc chế độ Client, chính vì vậy nó dễ dàng được tham chiếu như một server/client, và có thể kết nối lẫn nhau dễ dàng hơn. 

Khởi động một server:

Server duy trì trạng thái của cluster, trả lời các truy vấn RPC, trao đổi với trung tâm dữ liệu khác qua WAN.

 

consul agent -data-dir=/tmp/consul -node=agent-name -bootstrap -bind=<external ip> -server

với tham số

  • -data-dir: là thư mục cho agent lưu trữ trạng thái. Thư mục này phải tồn tại ổn định, và rất cần thiết cho agent server.
  • -node: tên của node
  • -bind: là địa chỉ node hiện tại (ip local) để liên kết với các node khác.
  • -bootstrap: chỉ định node hiện tại là leader cluster.

 

Ngay lập tức, node được khởi tạo. Dùng lệnh consul members để kiểm tra thành viên trong cluster. 

Node        Address             Status  Type    Build  Protocol  DC   Segment
agent-name  192.168.100.4:8301  alive   server  1.0.7  2         dc1  <all>

 

Có thể khởi tạo consul qua docker container:

docker run -d --net=host consul agent -bootstrap -bind=<external ip> -server

Khởi động một client

Một client là một agent chuyển tiếp tất cả các RPC tới một server. Client được khởi động sau khi khởi động server


consul agent -data-dir=/tmp/consul -node=agent-name -bind=<external ip>

hoặc

docker run -d --net=host consul agent -bind=<external ip>

Join các agent với nhau

consul join <IP_other_node>

Câu lênh JOIN sẽ kết nối với node khác qua cổng mặc định 8301 thông qua mạng LAN. Khi ấy các method RPC ở các node đều được đồng bộ và có thế gọi ở bất cứ node nào. Sử dụng câu lệnh consul members để kiểm tra danh sách nodes 

 

Node        Address             Status  Type    Build  Protocol  DC   Segment
agent-name  192.168.100.4:8301  alive   server  1.0.7  2        dc1  <all>
agent-name-2  192.168.100.5:8301  alive   server  1.0.7  2      dc1  <all>

ádasda

Sử dụng method RPC ở consul agent khác trong cluster

 

Khởi động node1 ở IP 192.168.100.4

Node        Address             Status  Type    Build  Protocol  DC   Segment
node1  192.168.100.4:8301  alive   server  1.0.7  2       dc1  <all>

 

Sau đó khởi động 2 service Go-micro ở node1

~> micro list services 
consul
go.micro.api
go.micro.greeter

 

Khởi động node2 ở IP 192.168.100.5 và join vào node1 

~> consul join 192.168.100.4
Successful
~> consul members

Node        Address             Status  Type    Build  Protocol  DC   Segment
node1  192.168.100.4:8301  alive   server  1.0.7  2       dc1  <all>
node2  192.168.100.5:8301  alive   server  1.0.7  2       dc1  <all>

 

TẠI NODE2: IP 192.168.100.5

~> micro list services 
consul
go.micro.api
go.micro.greeter

 

Dùng câu lênh micro call ở node2 để gọi method ở node1 , kết quả vẫn trả về response bình thường

~> micro call go.micro.greeter Say.Hello '{"name": "John"}'
Hello John