Golang下透過grpc調用服務案例
grpc簡單說就是跨平台(跨語言)調用各種服務的通用轉接口
Golang下透過grpc調用服務案例
grpc簡單說就是跨平台(跨語言)調用各種服務的通用轉接口
對.proto文件使用轉譯指令:
protoc --go_out=plugins=grpc:. *.proto
案例:透過grpc遠程傳遞一個調用teacher資料類型的服務
.proto:
syntax="proto3";
option go_package="/.;pb";
message Teacher{
int32 age=1;
string name=2;
}
service SayName{
rpc SayHello(Teacher) returns(Teacher);
}
server:
type Children struct{}
// 綁定類方法
func (c *Children) SayHello(ctx context.Context, t *pb.Teacher) (*pb.Teacher, error) {
t.Name += "is sleeping"
return t, nil
}
func main() {
// 初始一個grpc對象
grpcServer := grpc.NewServer()
// 註冊服務
pb.RegisterSayNameServer(grpcServer, new(Children))
// 監聽
listener, err := net.Listen("tcp", "127.0.0.1:8899")
if err != nil {
fmt.Println("listen err", err)
return
}
fmt.Println("server監聽中...")
defer listener.Close()
// 啟動服務
grpcServer.Serve(listener)
}
client:
func main() {
// 連接grpc服務
grpcConn, err := grpc.Dial("127.0.0.1:8899", grpc.WithInsecure())
if err != nil {
fmt.Println("conn err", err)
return
}
defer grpcConn.Close()
// 初起化客戶端
gprcClient := pb.NewSayNameClient(grpcConn)
// 創建並初始化接收對象
var teacher pb.Teacher
teacher.Age = 18
teacher.Name = "Mary"
// 調用遠程服務
t, err := gprcClient.SayHello(context.TODO(), &teacher)
fmt.Println(t, err)
}
上次修改於 2021-09-27