centos7安gRPC

gRPC是由Google主导开发的RPC框架,使用HTTP/2协议并用Protobuf作为序列化工具,因此需要安装2个工具

  • protobuf 序列化框架:https://github.com/protocolbuffers/protobuf
  • protoc-gen-go工具:将proto文件转换成go代码,https://github.com/golang/protobuf/protoc-gen-go

1.安装protobuf框架

    1. 下载安装protobuf
      https://github.com/protocolbuffers/protobuf/releases/

centos7安gRPC_第1张图片

wget https://github.com/protocolbuffers/protobuf/releases/download/v3.10.0-rc1/protobuf-all-3.10.0-rc-1.tar.gz

解压后

// 改名,并移动到$GOPATH/src/github.com/protocolbuffers/
mv protobuf-all-3.10.0-rc-1 protobuf
mv protobuf  $GOPATH/src/github.com/protocolbuffers/

进入protobuf目录,依次执行下面命令

// 有些命令要要加 sudo 前缀才不会报错
./configure --prefix=$INSTALL_DIR 
make 
make check 
make install

如果 ./configure --prefix=$INSTALL_DIR 命令出现下面错误,说明缺少c++编译器,用下面命令解决

sudo yum install -y gcc+-c++

centos7安gRPC_第2张图片

其中make check成功,会显示下图
centos7安gRPC_第3张图片

上述操作如果出现了错误,可以查看同级目录下的config.log里面的日志。比如gcc的版本过低等问题

若一切顺利,输入查看版本
protoc --version

如果报下面的错误
protoc --version
protoc: error while loading shared libraries: libprotobuf.so.21: cannot open shared object file: No such file or directory
可以用以下步骤解决

find ./ -depth -name "libprotobuf.so.21" -print
输出如下
./src/.libs/libprotobuf.so.21

以export一个临时的全局变量LD_LIBRARY_PATH,然后运行程序的时候就会去这个目录中找共享库
LD_LIBRARY_PATH的意思是告诉loader在哪些目录中可以找到共享库。可以设置多个搜索目录,这些目录之间用冒号 " : " 分隔开

export LD_LIBRARY_PATH=$GOPATH/src/github.com/protocolbuffers/protobuf/src/.libs:$LD_LIBRARY_PATH
最后输入 
protoc --version

输出 
libprotoc 30.10.0


  • 2.安装protoc-gen-go

go get github网速正常的用下面命令

go get -d -u github.com/golang/protobuf/protoc-gen-go

go get 网速慢的用下面的方法替代
《go get github没速度的替代方法》

之后将下载的文件包移动到 github.com/golang/protobuf,进入 protoc-gen-go 目录,执行 go install 安装

注意:如果 protoc-gen-go 安装的是 v1.3.2 版本,那么在用 go mod 做依赖包管理时,版本也要写对,不然会报错undefined: proto.ProtoPackageIsVersion3 的错误,正确写法如下

	go mod 文件里的写法
	github.com/golang/protobuf v1.3.2


示例:

// 编写 proto 文件
// 指定proto版本,有多个版本,3是最新版本,更轻量化,支持更多语言
syntax = "proto3";

// 定义包名
// package proto;

// 定义请求信息结构
message HelloRequest{
    string name = 1;
}

// 定义响应信息结构
message HelloResponse{
    string message = 1;
}

// 定义Hello服务
service Hello{
    // 定义服务中的方法
    rpc SayHello(HelloRequest)returns(HelloResponse){}
}
// 执行如下命令
protoc -I . --go_out=plugins=grpc:. ./hello.proto

生成响应的go代码,如下图示

protoc命令 各个参数的详细解释看下面地址,第一节
https://github.com/Jergoo/go-grpc-example

你可能感兴趣的:(gRPC)