從零開始搭建 gRPC 服務 – Golang 篇(一)

java06051515發表於2018-12-12

:一個高效能、開源的通用 RPC 框架,基於標準的   進行傳輸,預設採用   序列化結構化資料。本文將介紹如何從零搭建一個   的 gRPC 服務。

準備工作

本文所述的搭建環境基於 滴滴雲 售賣的 CentOS 7.2 標準映象

安裝 Golang

下載最新版本的 Golang 安裝包

gRPC 依賴於 1.6 以上版本,如果對其他版本有訴求可以在   選擇下載

  $   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/,如需轉載,請註明出處,否則將追究法律責任。

相關文章