grpc网关是一种充当客户端和grpc服务之间中介的服务,它作为客户端和grpc服务通信的桥梁,负责将客户端发起的请求转发给grpc服务端,并将grpc服务端响应返回给客户端。grpc网关可以实现协议转换、路由转发、负载均衡、缓存、限流等功能,从而提高服务的可用性和性能。
### 依赖工具
- 准备一个微服务 [user](https://github.com/zhufuyi/sponge_examples/tree/main/4_micro-grpc-protobuf)。
- 准备proto文件 [edusys_gw.proto](https://github.com/zhufuyi/sponge_examples/blob/main/5_micro-gin-rpc-gateway/edusys-grpc-gateway/api/edusys_gw/v1/edusys_gw.proto)。
- 安装工具 [sponge](https://github.com/zhufuyi/sponge/blob/main/assets/install-cn.md)。
安装完工具sponge后,执行命令打开UI界面:
```bash
sponge run
```
<br>
### 快速创建grpc网关项目
进入sponge的UI界面,点击左边菜单栏【Protobuf】-->【创建grpc网关项目】,填写一些参数生成grpc网关项目代码。
![micro-rpc-gw-pb.png](https://static.golangjob.cn/231108/bcdd60d9f5c2b8d22341f05405b1718f.png)
web框架使用 [gin](https://github.com/gin-gonic/gin),还包含了swagger文档、常用的服务治理功能代码,构建部署脚本等。
<br>
### 使grpc网关服务可以调用微服务api接口
#### 生成grpc连接代码
在rpc网关服务为了连接rpc服务,需要另外生成连接rpc服务代码,点击左边菜单栏【Public】--> 【生成grpc服务连接代码】,填写参数生成代码,然后把生成的连接rpc服务代码移动到grpc网关项目。
![micro-rpc-cli.png](https://static.golangjob.cn/231108/2bc71caf27198c7c1a8064a4782646f4.png)
<br>
#### 配置微服务地址
打开配置文件`configs/edusys_gw.yml`,设置grpc服务地址。
```yaml
grpcClient:
- name: "user"
host: "127.0.0.1"
port: 8282
registryDiscoveryType: ""
enableLoadBalance: false
```
<br>
#### 复制grpc服务的proto文件
为了在rpc网关服务中能够调用rpc服务的方法,需要把rpc服务的proto文件复制到rpc网关服务的目录`api/edusys_gw/v1`。在grpc网关目录下,执行命令:
```bash
# 注:此命令用来复制使用sponge创建的微服务proto文件
make copy-proto SERVER=../../4_micro-grpc-protobuf
```
<br>
### 启动微服务和grpc网关服务
#### 运行微服务
切换到微服务 [user](https://github.com/zhufuyi/sponge_examples/tree/main/4_micro-grpc-protobuf) ,运行微服务:
```bash
make run
```
<br>
#### 运行grpc网关服务
切换到 edusys-grpc-gateway 目录,执行命令:
```bash
# 生成代码
make proto
# 打开 internal/service/user_gw.go,根据示例代码填写具体逻辑代码
# 这是填写的具体逻辑代码: https://github.com/zhufuyi/sponge_examples/blob/main/5_micro-gin-rpc-gateway/edusys-grpc-gateway/internal/service/edusys_gw.go
# 编译和启动服务
make run
```
在浏览器打开 [http://localhost:8080/apis/swagger/index.html](http://localhost:8080/apis/swagger/index.html) 就可以测试api接口了。
![micro-rpc-gw-pb-swagger.png](https://static.golangjob.cn/231108/9f4de237167f2f7a2b3cd097d6691dc5.png)
<br>
**这是根据上面步骤生成的grpc网关服务代码** [https://github.com/zhufuyi/sponge_examples/tree/main/5_micro-gin-rpc-gateway](https://github.com/zhufuyi/sponge_examples/tree/main/5_micro-gin-rpc-gateway)
**点击查看详细的grpc网关服务开发文档** [https://go-sponge.com/zh-cn/rpc-gateway-development-protobuf](https://go-sponge.com/zh-cn/rpc-gateway-development-protobuf)
<br>
<br>
有疑问加站长微信联系(非本文作者))