自己做网站怎么租服务器,上海网站建设行业,国内免费建站网站,西地那非片吃了多久会硬起来今天来分享一波 gRPC-Gateway #xff0c; 之前咱们有分享过什么是 gRPC 及其使用方式#xff0c;可以看看这些关于 gRPC 的历史文章#xff1a;
gRPC介绍 gRPC 客户端调用服务端需要连接池吗#xff1f; gRPC的拦截器 gRPC的认证 分享一下 gRPC- HTTP网关 I
今天主要是分…今天来分享一波 gRPC-Gateway 之前咱们有分享过什么是 gRPC 及其使用方式可以看看这些关于 gRPC 的历史文章
gRPC介绍 gRPC 客户端调用服务端需要连接池吗 gRPC的拦截器 gRPC的认证 分享一下 gRPC- HTTP网关 I
今天主要是分享关于 gRPC-Gateway 的实战部分文章大体分为如下几个部分
gRPC-GateWay 简单原理介绍 基本环境创建 gRPC-GateWay 实战
gRPC-GateWay 简单原理介绍
如下是官网的一张基本原理图
gRPC-Gateway 是一个协议插件它读取一个 gRPC 服务定义并生成一个反向代理服务它将一个 RESTful JSON API 转换为 gRPC 这个服务器是根据gRPC定义中的自定义选项生成的。 简单来说咱们的 gRPC-Gateway 能做到的事情就是
能够提供 RESTful JSON API 接口并且请求通过 http 接口打进来gRPC-Gateway 能够将其请求转给 grpc 服务最终 grpc 服务进行处理并响应
接下来我们就来看看 gRPC-Gateway 是如何同时提供 http 接口和 grpc 服务的
基本环境创建
使用 gRPC-Gateway 我们需要搭建基本的环境正如之前我们实战 grpc 的时候需要搭建一个基本的 grpc 环境总的来说需要做如下事项
开始创建自己的项目目录
mkdir my_grpcgateway
cd my_grpcgateway
mdkir protoc/order
cd protoc/order下载 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检查工具执行完第二步之后我们可以看到咱们将 gRPC-Gateway 的依赖库和工具都下载下来了咱们可以看到在我们的 GOPATH 目录下有如下工具 protoc-gen-go protoc-gen-grpc-gateway protoc-gen-go-grpc protoc
将依赖库的 google/api 拷贝到咱们的 order 目录下
这个时候我们主要是后续实战会使用库里面的 annotations.proto 他的作用就是将 HTTP 映射成 gRPC目录是这样的
google/
├── api
│ ├── annotations.proto
│ ├── httpbody.proto
│ └── http.proto例如我的 GOPATH 在 “/root/go” 因此我们可以这样来复制 cp /root/go/pkg/mod/github.com/grpc-ecosystem/grpc-gatewayv1.16.0/third_party/googleapis/google/api/ ./接下来就可以进入到实战部分了目前我们的目录是这样的
my_grpcgateway/
├── protoc
│ └── order
│ ├── google
│ │ ├── api
│ │ │ ├── annotations.proto
│ │ │ ├── httpbody.proto
│ │ │ └── http.protogRPC-GateWay 实战
来到实战部分先说一下咱们的需求
咱们客户端通过请求服务端接口查询订单信息
这个时候其实我们只需要走如下 3 步骤即可
编写 proto 文件 用工具生成相应的代码 填写相应的代码逻辑即可
编写 proto 文件
在上述的 my_grpcgateway/protoc/order 下 创建 文件 order.proto
cd my_grpcgateway/protoc/order
vim order.proto编写 order.proto 文件的时候我们导入了annotations.proto 文件 import google/api/annotations.proto;
另外我们在编写 proto 的时候现在多定义了一个 Service
service Order {rpc GetOrderInfo (GetOrderReq) returns (GetOrderRsp) {option (google.api.http) {post: /v1/order/getorderbody: *};};
}那通过我们写的 order.proto 文件我们知道咱们定义的
HTTP 接口是 POST /v1/order/getorder gRPC 接口是 GetOrderInfo
用工具生成相应的代码
protoc -I ./ \--go_out ./ --go_opt pathssource_relative \--go-grpc_out ./ --go-grpc_opt pathssource_relative \--grpc-gateway_out ./ --grpc-gateway_opt pathssource_relative \./order.proto我们生成的文件存放目录都是当前目录使用 protoc 工具生成代码后我们可以看到 order 目录下是这样的
# ls
google order_grpc.pb.go order.pb.go order.pb.gw.go order.proto这个时候其实我们本次最关注的是 order.pb.gw.go 文件的生成
填写相应的代码逻辑即可
那这个时候我们就可以创建代码文件来实现上述的 gRPC 接口以及初始化 gRPC 服务和 gRPC-Gateway 的反向代理了
在 my_grpcgateway 目录下创建 main.go 在 my_grpcgateway 下创建 server 目录并在 server 目录下编写 server.go
mkdir server
cd server
vim server.goserver.go 回到 my_grpcgateway 创建 mod拉依赖包并运行代码
go mod init mytest
go mod tidy
go run main.go这个时候我们可以看到 6666 端口和 9999 端口都被服务监听着此时我们来请求 9999 的 HTTP 端口如下
服务端已经启动 客户端可以使用 postman 来请求接口 当然也可以在 linux 里面使用 curl 来请求接口
curl -X POST -d {tid:0001-000001, tenant_name:test tenant, order_id:1000-1000001} http://localhost:9999/v1/order/getorder写在最后
至此我们从 gRPC-Gateway 的基本原理到快速实战相信 xdm 能够有一定的收获吧赶紧动起手来实战一波并加入自己的想法变着花样的去玩他
使用 gRPC-Gateway 可以极大的提高我们的效率直接实现 grpc 服务接口也可以提供 http 接口出去
下一篇将会是 gRPC-Gateway Swaager 相关能够让我们提供出去的接口更加友好和方便
项目代码可以查看地址https://github.com/qingconglaixueit/my_grpcgateway_demo
感谢阅读欢迎交流点个赞关注一波 再走吧
欢迎点赞关注收藏
朋友们你的支持和鼓励是我坚持分享提高质量的动力 好了本次就到这里
技术是开放的我们的心态更应是开放的。拥抱变化向阳而生努力向前行。
我是阿兵云原生欢迎点赞关注收藏下次见~
可以进入地址进行体验和学习https://xxetb.xet.tech/s/3lucCI