gRPC :一个高性能、开源的通用 RPC 框架,基于标准的 HTTP/2 进行传输,默认采用 Protocol Buffers 序列化结构化数据。本文将介绍如何从零搭建一个 Golang 的 gRPC 服务。
准备工作
本文所述的搭建环境基于 滴滴云 售卖的 CentOS 7.2 标准镜像
安装 Golang
下载最新版本的 Golang 安装包
gRPC 依赖于 1.6 以上版本,如果对其他版本有诉求可以在 https://golang.org/dl/
选择下载
$ wget https : //dl.google.com/go/go1.11.2.linux-amd64.tar.gz
解压安装包
$ tar zxvf go1 . 11.2.linux - amd64 . tar . gz
配置环境变量
检查安装结果
$ go version && go env
出现以下信息则表明安装成功
安装 Protocol Buffers
下载最新版本的 Protobuf 安装包
$ wget https : //github.com/protocolbuffers/protobuf/releases/download/v3.6.1/protobuf-all-3.6.1.tar.gz
解压安装包
$ tar zxvf protobuf - all - 3.6.1.tar.gz
安装 Protobuf
$ cd protobuf - 3.6.1 /
$ . / configure && make && sudo make install
安装 Protobuf Golang 插件
$ go get - u - v github . com / golang / protobuf / protoc - gen - go
检查安装结果
安装 gRPC
网络环境允许的同学安装 gRPC 非常方便,直接执行以下命令即可安装完成:
$ go get - u - v google . golang . org / grpc
如果出现以上问题,则可以按照下面的方式进行安装:
在 GOPATH 下创建 google.golang.org 目录
$ mkdir - p $ GOPATH / src / google . golang . org /
$ cd $ GOPATH / src / google . golang . org /
下载 gRPC 最新代码并解压
安装 gRPC
$ go install google . golang . org / grpc
如果在安装过程中出现以上错误,表明 gRPC 依赖的库缺失,则需按照错误提示逐步补全安装其依赖库
安装 golang.org/x/*
golang.org/x/
在 github.com/golang/
下均有 mirror,利用这个我们可以以 GitHub 为跳板来安装相应依赖。执行以下脚本则可以自动完成 golang.org/x/*
的安装
安装 google.golang.org/genproto
google.golang.org/genproto
在GitHub 上的 mirror 地址为: github.com/google/go-genproto
$ wget https : //github.com/google/go-genproto/archive/master.tar.gz -O ${GOPATH}/src/google.golang.org/genproto.tar.gz
$ cd $ { GOPATH } / src / google . golang . org && tar zxvf genproto . tar . gz && mv go - genproto - master genproto
依赖安装完毕后再次执行 go install google.golang.org/grpc
即可完成 gRPC 的安装,自此环境相关的准备工作完成。
构建一个简单的 gRPC 服务
以该 helloworld.proto
文件为例
编译 .proto 文件
这样编译出来结果只是将 .proto
文件中描述的结构与方法翻译成了 Golang 而已,如果需要将其以 gRPC 的方式提供服务的话,需需要在编译时指定插件
编写 client.go 与 server.go
在当前目录下创建一个 client.go
,一个 server.go
文件,目录结构如下:
编写 client.go
编写 server.go
运行 gRPC 服务
打开两个会话窗口,在其中之一执行:
$ go run server . go
在另一个会话窗口运行:
$ go run client . go gRPC
2018 / 12 / 09 18 : 05 : 22 Greeting : Hello gRPC
自此一个简单的 gRPC 服务就搭建起来了。
构建一个安全的 gRPC 服务
同样是上面的 .proto
文件,我们想要为其增加 鉴权 与 加密传输 的能力
增加 TLS
生成服务端公私钥
$ openssl genrsa - out server . key 2048
$ openssl req - x509 - key server . key - out server . pem
目录结构为:
改写 server.go
改写 client.go
运行 gRPC 服务
打开两个会话窗口,在其中之一执行:
$ go run server . go
在另一个会话窗口运行:
$ go run client . go tls _ gRPC
2018 / 12 / 09 21 : 19 : 07 Greeting : Hello tls _ gRPC
增加 OAuth2 鉴权
改写 server.go
改写 client.go
由于 golang.org/x/oauth2
中依赖了 cloud.google.com/go/compute/metadata
,其在 GitHub 上的 mirror 地址为 github.com/googleapis/google-cloud-go
,于是我们需要按照之前的方式安装该依赖。
运行 gRPC 服务
打开两个会话窗口,在其中之一执行:
$ go run server . go
在另一个会话窗口运行:
$ go run client . go oauth2_tls _ gRPC
2018 / 12 / 09 21 : 27 : 56 Greeting : Hello oauth2_tls _ gRPC
自此一个安全的 gRPC 服务就搭建起来了。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/31559758/viewspace-2284763/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/31559758/viewspace-2284763/