ITPub博客

首页 > 云计算 > 开源云工具 > 从零开始搭建 gRPC 服务 – Golang 篇(一)

从零开始搭建 gRPC 服务 – Golang 篇(一)

原创 开源云工具 作者:java06051515 时间:2018-12-12 13:13:51 0 删除 编辑

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/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2018-10-26

  • 博文量
    128
  • 访问量
    96289