示例五:一键自动生成grpc网关服务代码,轻松实现跨服务、跨语言grpc调用

zhufuyi · · 1267 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

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>

有疑问加站长微信联系(非本文作者))

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

1267 次点击  ∙  1 赞  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传