当前位置: 首页 > news >正文

gozero使用gRPC-gateway生成http网关

gozero使用gRPC-gateway生成http网关

  • 目前gozero开发有点复杂,先写api文件生成http服务,然后在写proto3文件生成grpc服务属实有地麻烦
  • 所以想试试能不能定义proto3生成grpc服务,然后再通过grpc开启http服务
  • 这样做的好处是少写了api文件和部分代码,而且本身proto3就是必须写的,还能顺带生成swagger文档
  • 先生成demo代码 执行命令:goctl rpc new demo
  • 仓库地址 链接在这里

最终的文件目录

在这里插入图片描述

定义proto3文件并且使用验证器

syntax = "proto3";package demo;
import "validate/validate.proto";
import "google/api/annotations.proto";
option go_package = "./demo";message Request {string ping = 1[(validate.rules).string.len = 3];//输入
}message Response {string pong = 1[(validate.rules).string.len = 2]; //输出
}service Demo {//ping方法rpc Ping(Request) returns(Response){option (google.api.http) = {post: "/api/ping"body: "*"};};
}

demo.yaml

Name: demo.rpc
ListenOn: 0.0.0.0:7070
Mode: dev
Consul:Host: localhost:8500 # consul endpointKey: add.rpc # service name registered to ConsulMeta:Protocol: grpcTag:- tag- rpc

gateway.yaml

Name: gateway
Host: 0.0.0.0
Port: 7777
Upstreams:- Grpc:Target: localhost:7070Prefix: /api
#    ProtoSets: #填这个就报错,因为使用了验证器,找不到文件
#        - ../demo/demo.pb
#    Mappings: #这个可以不填写
#      - Method: POST
#        Path: /ping
#        RpcPath: demo.Demo/Ping

getway.go

package mainimport ("github.com/zeromicro/go-zero/core/conf""github.com/zeromicro/go-zero/gateway"
)func main() {var c gateway.GatewayConfconf.MustLoad("gateway.yaml", &c)gw := gateway.MustNewServer(c)defer gw.Stop()gw.Start()
}
然后执行生成proto对应的文件,需要修改-I的文件路径,按照自己下载的包地址来protoc demo.proto -I. -I/code/nan/third_party \-I/code/nan/third_party/google \-I/go/pkg/mod/github.com/envoyproxy/protoc-gen-validate@v1.2.1 \--go_out=. --go-grpc_out=.  \--openapiv2_out=demo --openapiv2_opt=logtostderr=true \--validate_out=demo --validate_opt=lang=go,paths=source_relative \--descriptor_set_out=demo/demo.pb
之后就单独启动grpc服务(main.go)和网关服务(getway.go)

补充

  1. 没解决proto3生成的时候项目路径问题
  2. 生成的swagger文档可以直接导入到apifox,grpc的调试可以通过apifox,具体步骤如下,新建项目的时候选择grpc项目,proto文件选择服务器映射,直接选择开启的grpc服务就可以生成文档,进行调试
http://www.dtcms.com/a/389353.html

相关文章:

  • Go语言100个实战案例-项目实战篇:股票行情数据爬虫
  • Python开发最新 PyCharm 2025使用(附详细教程)
  • 【session基础】
  • 客户流失预警中uplift建模案例、入门学习(二)
  • SSH远程管理工具
  • 4644电源芯片的介绍和使用
  • MIPI D-PHY布线规则
  • 《深入理解Java虚拟机》第四章节读书笔记:虚拟机性能监控、故障处理工具
  • ​​[硬件电路-251]:电源相关常见的专业术语
  • 日志中的SQL语句直接转为可执行的SQL
  • Java 大视界 -- Java 大数据在智慧文旅旅游景区游客情感分析与服务改进中的应用实践
  • Nginx-RTMP-Module开源项目全解析:从基础部署到企业级应用实践
  • 新代系统如何输入期限密码
  • 【C++】STL--stack(栈)queue(队列)使用及其重要接口模拟实现
  • 计算机组成原理:奔腾系列机的虚存组织
  • 架构模式的双雄会:Reactor与Proactor的高并发哲学
  • 【C++】STL详解(八)—stack和queue的模拟实现
  • 【LeetCode Hot100----08-二叉树篇中(06-10),包含多种方法,详细思路与代码,让你一篇文章看懂所有!】
  • ARM(12) - ADC 检测光照强度
  • 网格生成引擎:设计原则、关键组件
  • 【开发AI】Spring AI Alibaba:集成AI应用的Java项目实战
  • Spark专题-第二部分:Spark SQL 入门(2)-算子介绍-Scan/Filter/Project
  • Selenium 自动化爬虫:处理动态电商页面
  • 无需Selenium:巧用Python捕获携程机票Ajax请求并解析JSON数据
  • Python版Kafka基础班 - 学习笔记
  • IDEA 查看 Maven 依赖树与解决 Jar 包冲突
  • 【LVS入门宝典】LVS与Nginx、HAProxy的对比:四层(LVS) vs 七层(Nginx)的适用场景
  • 系统安全配置与加固
  • 【AI-Agent】AI游戏库
  • 病毒库更新原理