grpc-gateway使用

前言

记录下使用grpc-gateway来支持grpc服务的http请求,网上大都是引入google/api/annotations.proto的方式,懒的改每个proto文件,在grpc-gateway的github里看到了另一种方式,不用改proto文件,适合~

原理

grpc-gateway的原理我就不赘述了,大概逻辑是http的请求过来,grpc-gateway接受请求,再生成grpc的client,去请求grpc的server端;做了层转化
所以是启了2个服务,一个http服务,一个grpc服务
如图:

安装grpc-gateway的相关包

$ go get github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-grpc-gateway
$ go get google.golang.org/protobuf/cmd/protoc-gen-go
$ go get google.golang.org/grpc/cmd/protoc-gen-go-grpc

protoc生成相关编译文件

用protoc编译proto文件的命令,每个proto文件分别生成pb.go和pb.gw.go的后缀文件,即相关的grpc和网关的

protoc -I ../proto目录 \
--go_out=plugins=grpc:../编译生成的文件目录 \ 
--grpc-gateway_out ../编译生成的文件目录 \
--grpc-gateway_opt logtostderr=true \
--grpc-gateway_opt paths=source_relative \
--grpc-gateway_opt generate_unbound_methods=true \ 
../proto目录/*.proto

测试请求http

这里是请求test包的Service服务的Hello方法 ;必须是Post请求,因为看pb.gw.go里默认的都是POST方法请求,不然会提示错误"Method Not Allowed"

curl -XPOST  http://localhost:8081/test.Service/Hello
posted @ 2021-08-06 16:30  yeevan  阅读(1838)  评论(0编辑  收藏  举报