前言
Go Micro Dashboard是基于go-micro和ng-alain開發的, 它既是go-micro開發程序中的工具,也可以作為學習go-micro的實際案例,接下來我將會詳細介紹一下這個專案的一些實作細節,
一、服務串列
服務的發現與注冊,是分布式微服務中重要的基礎模塊,單個服務通過服務注冊將節點資訊公開出去,并通過服務發現獲取其他服務的節點資訊,
go-micro中Registry注冊中心的定義
// The registry provides an interface for service discovery
type Registry interface {
Init(...Option) error
Options() Options
Register(*Service, ...RegisterOption) error
Deregister(*Service, ...DeregisterOption) error
GetService(string, ...GetOption) ([]*Service, error)
ListServices(...ListOption) ([]*Service, error)
Watch(...WatchOption) (Watcher, error)
String() string
}
Server啟動后,都會將自己的Host、Port、Version、Handler、Subscriber、Metadata等資訊封裝到registry.Service里,然后注冊到Registry,
Client在請求時通過GetService獲取服務節點資訊,并通過Selector中的負載均衡策略選擇服務節點,
Go Micro Dashboard通過ListServices獲取所有注冊的服務,并將Service串列按名稱和版本分組,
如下圖所示,當前系統中運行的服務服務及對應版本一覽無遺,可以點擊服務名稱或版本號快速查看服務詳細資訊,

二、服務詳情
通過registry.GetService可以獲取到服務的詳細資訊,包括Version、Endpoints、Nodes等,
go-micro中Service注冊服務的定義
type Service struct {
Name string `json:"name"`
Version string `json:"version"`
Metadata map[string]string `json:"metadata"`
Endpoints []*Endpoint `json:"endpoints"`
Nodes []*Node `json:"nodes"`
}
服務啟動后會將Handler和Subscriber都注冊到Endpoints中,Handler代表對外提供的RPC服務,Subscriber代表訂閱的異步訊息,
其中Subscriber的Metadata中subscriber為true,
func isSubscriber(ep *registry.Endpoint) bool {
if ep == nil || len(ep.Metadata) == 0 {
return false
}
if s, ok := ep.Metadata["subscriber"]; ok && s == "true" {
return true
}
return false
}
將Service拆分為Nodes、Handlers、Subscribers,就得到下圖中的服務詳細資訊,

三、節點串列
通過registry.ListService獲取所有服務資訊,并將其中所有Nodes按照服務名稱分組,就得到了下圖中的所有節點串列,
服務啟動時,會自動注冊健康檢查的Handler,我們可以通過這個來對節點進行健康檢查,
debugService := debug.NewDebugService(req.Service, c)
reply, err := debugService.Health(ctx, &debug.HealthRequest{}, callOpts...)
如果節點運行正常,會回傳Status: ok,
debug/handler/debug.go
func (d *Debug) Health(ctx context.Context, req *proto.HealthRequest, rsp *proto.HealthResponse) error {
rsp.Status = "ok"
return nil
}

總結
本文介紹了Go Micro Dashboard利用Registry查看微服務資訊的內部實作,也介紹了go-micro中對應的一些概念,
專案地址:github.com/xpunch/go-micro-dashboard
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/385265.html
標籤:其他
