tft每日頭條

 > 生活

 > golang核心api

golang核心api

生活 更新时间:2025-01-11 13:00:42

golang核心api?同樣,本篇文章主要是分析一下manual解析器中的Build方法,做了什麼事情?,接下來我們就來聊聊關于golang核心api?以下内容大家不妨參考一二希望能幫到您!

golang核心api(gRPC-go框架之manual解析器)1

golang核心api

同樣,本篇文章主要是分析一下manual解析器中的Build方法,做了什麼事情?

1、manual類型的解析器,如何獲取後端grpc服務器的地址列表?

有多種技術實現思路:

  • 方式一:可以将grpc服務器地址列表,存儲到遠程服務器,如consol, etcd, zk, 文件服務器等等;然後通過接口調用,從遠程服務器裡獲取grpc服務器地址列表,然後,再存儲到resolver.State(生産環境,建議使用此種方式)
  • 方式二:如果僅僅是測試環境的話,可以直接手動維護,自己将grpc服務器地址列表,初始到resolver.State裡;

參考一下,grpc-go框架自帶的測試用例,如下:直接進入grpc-go/examples/features/health/client/main.go文件中:

1.func main() { 2. flag.Parse() 3. r, cleanup := manual.GenerateAndRegisterManualResolver() 4. defer cleanup() 5. r.InitialState(resolver.State{ 6. Addresses: []resolver.Address{ 7. {Addr: "localhost:50051"}, 8. //{Addr: "localhost:50052"}, 9. }, 10. }) 11. address := fmt.Sprintf("%s:///unused", r.Scheme()) 12. conn, err := grpc.Dial(address, options...) //---省略掉非核心代碼

主要流程說明:

  • 第3行:注冊解析器,至于如何注冊的,可以參考以前的文章
  • 第5行:直接将後端服務器地址列表封裝到resolver.State裡,調用InitialState;
  • 第11行:r.scheme是随機生成的;unused,說明manual解析器在獲取後端grpc服務器地址時,并沒有使用unused進行解析。

那麼,調用InitialState方法,有什麼用呢?點擊進入其内部:

func (r *Resolver) InitialState(s resolver.State) { r.bootstrapState = &s }

将resolver.State賦值給r.bootstrapState,這麼做就是為了用戶在客戶端不需要自己手動調用,而是grpc框架在build方法内部,幫我們調用UpdateState,從而觸發平衡器的操作流程,即最終向grpc服務器端發起rpc鍊接;

如果想了解更多的内容,可以點擊下面的鍊接。

,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关生活资讯推荐

热门生活资讯推荐

网友关注

Copyright 2023-2025 - www.tftnews.com All Rights Reserved