Grpc第一个案例
程序员文章站
2022-07-12 22:59:13
...
学习笔记:
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)
}