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>
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
Bình luận