Go微服務 grpc的簡單使用

2022-04-03 04:23:01 字數 2832 閱讀 2315

我的是windows,將壓縮包bin目錄下的exe放到環境path目錄中即可。

然後獲取外掛程式支援庫

// grpc執行時介面編譯碼支援庫

// 從 proto檔案(grpc介面描述檔案) 生成 go檔案 的編譯器外掛程式

go get -u github.com/golang/protobuf/protoc-gen-go
獲取go的grpc包(網路問題可參閱

go get google.golang.org/grpc
新建test.proto示例:

syntax = "proto3";

// 定義包名

package test;

// 可以定義多個服務,每個服務內可以定義多個介面

service waiter

rpc domd5 (req) returns (res) {}

} // 定義 req 訊息結構

message req

// 定義 res 訊息結構

message res

// ps:jsonstr和backjson只是隨手寫的名字,並沒有用json

proto檔案語法詳解參閱:

然後將proto檔案編譯為go檔案

// protoc --go_out=plugins=grpc:  

protoc --go_out=plugins=grpc:./test/ ./test.proto

注意:原則上不要修改編譯出來的*.bp.go檔案的**,因為雙方介面基於同乙個proto檔案編譯成自己的語言原始碼,此檔案只作為介面資料處理,業務具體實現不在*.bp.go中。

本人也是剛接觸go,基於的demo在修改中理解grpc

其中中文注釋均為個人理解筆記,若有不嚴謹的地方,還望指正。

package main

import (

"log"

"net"

"golang.org/x/net/context"

"google.golang.org/grpc"

"test"

"google.golang.org/grpc/reflection"

"fmt"

"crypto/md5"

)// 業務實現方法的容器

type server struct{}

// 為server定義 domd5 方法 內部處理請求並返回結果

// 引數 (context.context[固定], *test.req[相應介面定義的請求引數])

// 返回 (*test.res[相應介面定義的返回引數,必須用指標], error)

func (s *server) domd5(ctx context.context, in *test.req) (*test.res, error) , nil

}func main()

s := grpc.newserver() //建立grpc服務

/**註冊介面服務

* 以定義proto時的service為單位註冊,服務中可以有多個方法

* (proto編譯時會為每個service生成register***server方法)

* 包.註冊服務方法(grpc服務例項,包含介面方法的結構體[指標])

*/test.registerwaiterserver(s, &server{})

/**如果有可以註冊多個介面服務,結構體要實現對應的介面方法

* user.registerloginserver(s, &server{})

* minmovie.registerfbiserver(s, &server{})

*/// 在grpc伺服器上註冊反射服務

reflection.register(s)

// 將監聽交給grpc服務處理

err = s.serve(lis)

if err != nil

}

package main

import (

"log"

"os"

"golang.org/x/net/context"

"google.golang.org/grpc"

"test"

)func main()

// 函式結束時關閉連線

defer conn.close()

// 建立waiter服務的客戶端

t := test.newwaiterclient(conn)

// 模擬請求資料

res := "test123"

// os.args[1] 為使用者執行輸入的引數 如:go run ***.go 123

if len(os.args) > 1

// 呼叫grpc介面

tr, err := t.domd5(context.background(), &test.req)

if err != nil

log.printf("服務端響應: %s", tr.backjson)

}

啟動服務端監聽,執行客戶端即可達成遠端呼叫

go基於grpc構建微服務框架 服務註冊與發現

grpc 是谷歌開源的rpc框架,基於http2實現,並支援跨語言,目前基本涵蓋了主流語言.跨語言的實現主要得益於protobuf,通過編寫proto檔案,通過protobuf工具生成對應語言的類庫進行使用.對於go這樣一門新生語言來說,生態鏈還處於發展階段,微服務框架也是如此,下面將基於grpc ...

微服務優化之使用gRPC做微服務的內部通訊

grpc是乙個高效能的 開源的 普遍通用的rpc框架。簡單地說,它能夠幫助我們建立透明的服務端和客戶端通訊系統。google開發了grpc並且將其開源。通過它,乙個客戶端消費者服務可以像呼叫本地方法一樣,呼叫另一台主機上面的服務端方法。grpc本質上仍然遵循常規的remote procedure c...

微服務優化之使用gRPC做微服務的內部通訊

grpc是乙個高效能的 開源的 普遍通用的rpc框架。簡單地說,它能夠幫助我們建立透明的服務端和客戶端通訊系統。google開發了grpc並且將其開源。通過它,乙個客戶端消費者服務可以像呼叫本地方法一樣,呼叫另一台主機上面的服務端方法。grpc本質上仍然遵循常規的remote procedure c...