再次重新按這個(gè)教程操作時(shí)發(fā)現(xiàn)中間遇到一些報(bào)錯(cuò)介评,所以重新寫了一個(gè)細(xì)節(jié)補(bǔ)充的
Golang-grpc 加 gateway(一)(protoc ,gateway,swagger)2019-10 過(guò)程報(bào)錯(cuò)補(bǔ)充
最近在弄grpc的項(xiàng)目邪锌,但還需要給前端一些http的接口,就用了gateway。
廢話不多說(shuō)了宾肺,來(lái)這的肯定對(duì)grpc了解了塑崖,至于為啥用gateway自己谷歌吧。
直接開始吧
記錄下安裝準(zhǔn)備過(guò)程
有時(shí)間再寫個(gè)教程(二)展示下代碼的運(yùn)行
安裝 protoc 編譯器
(protoc編輯器惹苗,就是把我們的 .proto 文件編譯成不同語(yǔ)言的代碼)
第一步 去下面 github
https://github.com/protocolbuffers/protobuf
點(diǎn)擊 release 殿较,查看發(fā)行的版本
現(xiàn)在(2019-03-12)最新的是 v3.7.0
安裝方式一:(推薦第二種方式,簡(jiǎn)單更快)
- 下載 protobuf-all-3.7.0.zip 桩蓉,解壓
cd protobuf-3.7.0 - 然后執(zhí)行下面兩條命令安裝即刻
./configure
make install - 完成后檢測(cè)下是否安裝成功:
protoc --help
protoc --version
安裝方式二:
直接在剛才的GitHub的release頁(yè)面下載編譯好的包
- mac下載 protoc-3.7.0-osx-x86_64.zip
- 解壓
- 將 protoc-3.7.0-osx-x86_64 文件夾中的 bin 目錄下的 protoc 文件淋纲, 拷貝到 GOROOT下的bin目錄里面)
- 將 protoc-3.7.0-osx-x86_64 文件夾中的 include 目錄下的 google文件夾院究, 拷貝到 /usr/local/include 目錄
(其他系統(tǒng)具體操作可以看下 解壓文件下的 readme.txt 文件里面有說(shuō)明)
根據(jù)proto文件定義洽瞬,生成對(duì)應(yīng)語(yǔ)言代碼(演示的golang)
- 創(chuàng)建一個(gè) hello.proto 文件
先用官方文檔中最簡(jiǎn)單的一段測(cè)試代碼
syntax = "proto3";
package test;
// The greeting service definition.
service Greeter {
// Sends a greeting
rpc SayHello (HelloRequest) returns (HelloReply) {}
}
// The request message containing the user's name.
message HelloRequest {
string name = 1;
}
// The response message containing the greetings
message HelloReply {
string message = 1;
}
- 在該目錄下 執(zhí)行下面命令:
protoc --go_out=. hello.proto
或者
protoc --go_out=plugins=grpc:. hello.proto
或者
protoc --go_out=. *.proto
或者
protoc --go_out=plugins=grpc:. *.proto
會(huì)生成文件 hello.pb.go
安裝 grpc-gateway
github地址:
https://github.com/grpc-ecosystem/grpc-gateway
依次執(zhí)下面go get
go get -u github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway
go get -u github.com/grpc-ecosystem/grpc-gateway/protoc-gen-swagger
go get -u github.com/golang/protobuf/protoc-gen-go
上面執(zhí)行成功后會(huì)在 $GOBIN (/usr/local/go/bin)目錄下面 生成3個(gè)二進(jìn)制文件
protoc-gen-grpc-gateway
protoc-gen-grpc-swagger
protoc-gen-go
安裝完成了,接下來(lái)
修改一下剛才的 hello.proto 文件
syntax = "proto3";
package hello;
import "google/api/annotations.proto";
message HelloRequest {
string name = 1;
int32 age = 2;
}
message HelloReply {
string message = 1;
}
service HelloService {
rpc SayHello (HelloRequest) returns (HelloReply){
option (google.api.http) = {
post:"/v1/examples/sayhello"
body:"*"
};
}
}
生成代碼的命令需要變了
上面的proto文件用到了 import google/api 的一些文件
新的生成命令:
- 生成 pb.go
protoc -I/usr/local/include -I. -I$GOPATH/src -I$GOPATH/src/github.com/grpc-ecosystem/grpc-gateway/third_party/googleapis --go_out=plugins=grpc:. *.proto
生成 hello.pb.go
- 生成 gateway
protoc -I/usr/local/include -I. -I$GOPATH/src -I$GOPATH/src/github.com/grpc-ecosystem/grpc-gateway/third_party/googleapis --grpc-gateway_out=logtostderr=true:. *.proto
生成 hello.pb.gw.go
- 生成 swagger
protoc -I/usr/local/include -I. \
-I$GOPATH/src \
-I$GOPATH/src/github.com/grpc-ecosystem/grpc-gateway/third_party/googleapis \
--swagger_out=logtostderr=true:. *.proto
生成 hello.swagger.json
好了到這安裝protoc編輯器业汰,然后安裝gateway和swagger 都搞定了伙窃, 準(zhǔn)備工作都做完了
接下來(lái)就是開始碼代碼了