GRPC的配置,基于Golang的快速入门

参考文档:https://www.grpc.io/docs/languages/go/quickstart/

环境配置

一、安装protobuf编译器

https://github.com/protocolbuffers/protobuf/releases 这个网址中根据自己的操作系统下载对应的protobuf编译器

二、安装grpc包

go get -u google.golang.org/grpc

三、安装protoc转go的插件

进入$GOPATH/src/google.golang.org/grpc/cmd/protoc-gen-go-grpc目录下,运行下面的命令生成protoc-gen-go-grpc.exe可执行文件

go build
go install

进入$GOPATH/src/google.golang.org/protobuf/cmd/protoc-gen-go目录下,运行下面的命令生成protoc-gen-go.exe可执行文件

go build
go install

GRPC测试

一、编写add.proto文件

syntax = "proto3";

package my_add;
option go_package = ".;add";

service AddService {
  rpc addInt(AddRequest) returns (AddIntReply) {}
}

message AddRequest {
  int32 a = 1;
  int32 b = 2;
}

message AddIntReply {
  int32 res = 1;
}

二、进入add.proto文件所在的位置,输入如下命令

protoc.exe --go_out=. --go-grpc_out=. add.proto

这时会在同级目录下生成add.pb.goadd_grpc.pb.go文件。

三、新建service文件夹,编写服务端程序并运行

package main

import (
   "context"
   "fmt"
   "getcharzp.cn/test/grpc-test/my-add" // 这个包即就是add.bp.go文件所在的包
   "google.golang.org/grpc"
   "net"
)

type MyService struct {
   myAdd.UnimplementedAddServiceServer
}

func (s *MyService) AddInt(ctx context.Context, req *myAdd.AddRequest) (*myAdd.AddIntReply, error){
   res := add(req.GetA(), req.GetB())
   return &myAdd.AddIntReply{Res:res}, nil
}

func add(a, b int32) int32 {
   return a + b
}

func main()  {
   fmt.Println("the server run at 9999 ...")
   s,_:= net.Listen("tcp", ":9999")
   myService := MyService{}
   grpcServer := grpc.NewServer()
   myAdd.RegisterAddServiceServer(grpcServer, &myService)
   _ = grpcServer.Serve(s)
}

四、新建client文件夹,编写客户端程序并运行,这时的客户端就是通过RPC的方式对服务端的方法进行的调用

package main

import (
   "context"
   "fmt"
   "getcharzp.cn/test/grpc-test/my-add" // 这个包即就是add.bp.go文件所在的包
   "google.golang.org/grpc"
   "log"
)

func main() {
   conn,_ := grpc.Dial("127.0.0.1:9999", grpc.WithInsecure())

   c := myAdd.NewAddServiceClient(conn)
   req := myAdd.AddRequest{
      A: 99,
      B: 98,
   }
   reply, err := c.AddInt(context.Background(), &req)
   if err != nil {
      log.Println(err)
   }
   fmt.Println(reply.GetRes())
}
posted @ 2022-02-09 22:32  GetcharZp  阅读(137)  评论(0编辑  收藏  举报