快速構建一個Golang下通用的GRPC服務,拒絕996

qīqíqǐqì 2021-08-16 00:12:14 阅读数:269

本文一共[544]字,预计阅读时长:1分钟~
快速 golang 通用 grpc

前言

先囉嗦幾句,首先,此文章不介紹如何利用Golang實現一個GRPC的相關細節,本文為大家介紹一個框架,直接快速生成一個 GRPC 服務,你可以不用了解 GRPC 的實現細節,和 HTTP 服務一樣直接請求即可。

該方法可以滿足大部分的 GRPC 調用需求,但無法滿足所有的需求,如你需要實現個性化的調用方式還是得慢慢研究熟悉 GRPC 的使用方法。

通過此框架可以讓你快速實現 GRPC 服務,盡快提供一個可用的產品交付,然後慢慢熟悉了解GRPC,拒絕 996.。。

 

為什麼會來分享這個方法?這源於最近對工作中使用GRPC的一些思考。

問題的產生:

GRPC的優勢不用多說,大家也能從網絡上找到各種解釋,開始使用 GRPC 需要編寫 proto 文件,通過 protoc 工具生成 pb文件並開始編寫代碼... 整套流程下來對剛入手的同學非常不友好,剛開始大家都會有幾個疑問,啥是 proto 文件,啥是 pb 文件等等,等到研究完一圈,終於弄出一個 Hello World,領導就開始催這麼簡單的功能怎麼開沒提測,於是 996 就這樣開始了...

 

當前的問題:

等大家都開始用GRPC來作為服務間相互調用的常用方式後,新的問題隨之而來,大量的 proto文件散落各地,通過强有力的行政手段,讓大家規範 proto 文件存放比特置也難免會出現紕漏,另外一個大問題就是其他團隊對接GRPC也經常會非常頭疼,標准流程 同步proto文件--本地實現接口--實現調用聯調,和 HTTP 接口相比,確實要繁瑣很多。

 

方案介紹:

參考 HTTP 服務,在實際使用中 HTTP 服務通常 GET,POST,PUT 等方法使用的頻率會比多,並且大家的服務都會按照這些方法去開發接口因此相互調用就沒有太多差异,GRPC 如果類似實現幾個請求方法,這樣大家都是用這個方法就能解决複雜 proto 的問題了,接口調用通常都是 輸入與輸出,將輸入與輸出都變成 json 結構,這樣就能用一個通用的 GRPC 方法實現類似HTTP服務的調用方式了。

 

開始操作:

框架介紹:目前使用的是 Orange框架,此框架目前master版本支持了 GRPC 服務,通過此框架生成的應用,既有 HTTP 服務,也有 GRPC 服務。

 

創建一個服務端非常簡單,按照文檔,在自己的 $GOPATH/src 目錄下創建一個應用目錄,然後編寫 main.go,幾行代碼即可:

package main
import "gitee.com/zhucheer/orange/app"
func main(){
router := &Route{}
app.AppStart(router)
}
type Route struct {
}
func (s *Route) ServeMux() {
// 路由注册,注册一個GET請求,返回 Hello world!
app.NewRouter("").GET("/", func(ctx *app.Context) error {
return ctx.ToString("Hello world!")
})
// 路由注册,注册一個GRPC請求,返回一串信息
app.NewRouter("").GRPC("/grpc", func(ctx *app.Context) error {
return ctx.ToString("Hello world, this is grpc response")
})
}
func (s *Route) Register() {
}

 

 

目前只master版本支持GRPC, 按如下代碼啟動項目

## 開啟go mod
$ go mod init
## 先更新框架到master
$ go get gitee.com/zhucheer/[email protected]
## 啟動服務配置 GRPC 端口
go run main.go --grpc=8989

 

走到這一步,不出意外就能啟動服務,服務包含一個 HTTP 服務端口8088 ,和一個 GRPC 服務端口 8989

 

 

客戶端請求:

服務端啟動後就可以進行測試了,先驗證HTTP服務,打開瀏覽器,直接輸入 http://127.0.0.1:8088 就能看到瀏覽器輸入了一個我們代碼中編寫的 Hello World!

GRPC調用通用也非常簡單,隨便找個目錄創建一個main.go 輸入幾行代碼:

package main
import (
"fmt"
"gitee.com/zhucheer/orange/grpc"
)
func main(){
// 填上 GRPC 服務地址端口,RunGRPC 參數添加服務端路由綁定的地址
resp, err := grpc.NewClient().SetSrvAddr("127.0.0.1:8989").RunGRPC("/grpc")
fmt.Println("grpc response:",resp.String(), err)
}

 

go run main.go 運行起來就能成功調用剛才的 GRPC 服務端方法了,是不是非常簡單,快來試試吧。

 

版权声明:本文为[qīqíqǐqì]所创,转载请带上原文链接,感谢。 https://gsmany.com/2021/08/20210816001143675e.html