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