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/
本文详细介绍如何从零开始在Golang环境中搭建gRPC服务,包括安装Golang、gRPC及其依赖库,以及构建基本和安全的gRPC服务流程。
1120

被折叠的 条评论
为什么被折叠?



