Grpc第一个案例

    技术2022-07-10  133

    学习笔记:

    service端:

    目录结构

    proto 文件:

    syntax = "proto3"; package services; message ProdRequest{ int32 prod_id=1; //传入id } message ProtoResponse{ int32 prod_stock=1; //商品库存 } service ProdServic{ rpc GetProdStock(ProdRequest) returns(ProtoResponse); } //protoc --go_out=../services Prod.proto //protoc --go_out=plugins=grpc:../services Prod.proto 生成grpc 代码

    进入到 pb目录下 执行:

    protoc --go_out=plugins=grpc:../services Prod.proto 生成grpc 代码

    ProdService.go 文件代码:

    package services import ( "context" "fmt" ) type ProdService struct { } //实现grpc 方法 func (this *ProdService)GetProdStock(ctx context.Context, requst *ProdRequest) (*ProtoResponse, error) { fmt.Println("req=",requst.ProdId) //接收到客户端的数据 id:=requst.ProdId //逻辑处理 return &ProtoResponse{ProdStock:id},nil }

    service.go 文件代码:

    package main import ( "google.golang.org/grpc" "grpcpro/services" "log" "net" ) func main() { rpcService := grpc.NewServer() services.RegisterProdServicServer(rpcService,new(services.ProdService)) lis,_:= net.Listen("tcp",":8081") err:=rpcService.Serve(lis) if err!=nil{ log.Panic(err) } }

    客户端:

    目录结构: Prod.pb.go 是从serve端拷贝 Prod.pb.go来的,当然你也可以重新生成。

    main.go 文件代码

    package main import ( "client/services" "context" "fmt" "google.golang.org/grpc" "log" ) func main() { conn,err:=grpc.Dial(":8081",grpc.WithInsecure()) if err!=nil{ log.Panic(err) } defer conn.Close() prodClient:=services.NewProdServicClient(conn) predRequse,err:=prodClient.GetProdStock(context.Background(),&services.ProdRequest{ProdId: 12}) if err!=nil{ log.Panic(err) } fmt.Println("darta=",predRequse.ProdStock) }
    Processed: 0.012, SQL: 9