欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Grpc第一个案例

程序员文章站 2022-07-12 22:59:13
...

学习笔记:

service端:

目录结构
Grpc第一个案例

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来的,当然你也可以重新生成。
Grpc第一个案例

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)


}

相关标签: golang学习 golang