0x00

最近系统在从c++迁移到go,之前使用brpc,也需要转移到grpc,但是grpc提供的接口服务原生无法被http访问到,这对我们调试来说也很麻烦,所以需要让grpcbrpc一样,http也能访问rpc接口

0x01

grpc-gateway项目:

该项目是在grpc外面加一层反向代理,由代理服务器转发json格式,转变成protobuf格式来访问grpc服务,官方解释图如下:

你的grpc服务按照正常的方式启动就行了,然后根据proto文件生成gateway专有的gw.pb.go文件,然后我们重新启动一个gateway服务,有自己独立的端口,然后有一个入口,入口就是你grpc提供服务的ip和端口。

实验

启动grpc服务

grpc提供服务的端口为7777

启动代理服务

package mainimport ("flag""github.com/golang/glog""github.com/grpc-ecosystem/grpc-gateway/runtime""golang.org/x/net/context""google.golang.org/grpc""net/http"gw "data/proto"
)var (echoEndPoint = flag.String("echo_endpoint", "localhost:7777", "endpoint of YourService")
)func run() error {ctx := context.Background()ctx, cancel := context.WithCancel(ctx)defer cancel()mux := runtime.NewServeMux()opts := []grpc.DialOption{grpc.WithInsecure()}err := gw.RegisterGreeterHandlerFromEndpoint(ctx, mux, *echoEndPoint, opts)if err != nil {return err}return http.ListenAndServe(":8989", mux)}func main() {flag.Parse()defer glog.Flush()if err := run(); err != nil {glog.Fatal(err)}
}

gateway的端口为8989endpoint指向了grpc服务的端口7777

postman访问

访问成功

缺点

  • 需要开2个端口
  • 写多余的代码

理想情况下应该有个插件自己把http请求转换成proto的方式,犹如brpc一样

解决方法

后来发现https的方式是可以解决上面的问题,grpc和https端口在一起,也不用起两个服务。

grpc https gateway

20190621更新

同事用https://github.com/soheilhy/cmux把多个协议的服务都绑定到一起了

grpc提供http访问方式相关推荐

  1. Kubernetes的三种集群外部访问方式及使用场景说明:NodePort、LoadBalancer和Ingress

    Kubernetes的三种外部访问方式:NodePort.LoadBalancer和Ingress 最近有些同学问我 NodePort,LoadBalancer 和 Ingress 之间的区别.它们都 ...

  2. Kubernetes的三种外部访问方式:NodePort、LoadBalancer和Ingress

    Kubernetes的三种外部访问方式:NodePort.LoadBalancer和Ingress(转发) 原文 http://cloud.51cto.com/art/201804/570386.ht ...

  3. Kubernetes的Service外部访问方式:NodePort和LoadBalancer

    Kubernetes的Service外部访问方式:NodePort和LoadBalancer 关注公众号 风色年代(itfantasycc) 300G微服务资料等你拿! Kubernetes的Pod的 ...

  4. php 访问类成员,PHP类成员的访问方式和权限_PHP教程

    PHP5的访问方式允许限制对类成员的访问. 这是在PHP5中新增的功能,但在许多面向对象语言中都早已存在. 有了访问方式,才能开发一个可靠的面向对象应用程序,并且构建可重用的面向对象类库. 像C++和 ...

  5. 浅谈企业IT应用的访问方式之:乱想

        近来手上的几大块事情,算是大头朝下了.后面可能更多是跟公司的最终用户打交道,一套完整的应用服务体系,不光只是服务器平台的搭建.更重要的是如何让用户觉得确实给他们带来了帮助.     在非洲的一 ...

  6. 理解Kubernetes(2): 应用的各种访问方式

    理解Kubernetes系列文章: 手工搭建环境 应用的各种访问方式 1. 通过 Pod 的 IP 地址访问应用 1.1 Pod 的IP地址 每个Pod 都会被分配一个IP地址,比如下面这儿pod的I ...

  7. 项目一:第十二天 1、常见权限控制方式 2、基于shiro提供url拦截方式验证权限 3、在realm中授权 5、总结验证权限方式(四种) 6、用户注销7、基于treegrid实现菜单展示...

    1 课程计划 1. 常见权限控制方式 2. 基于shiro提供url拦截方式验证权限 3. 在realm中授权 4. 基于shiro提供注解方式验证权限 5. 总结验证权限方式(四种) 6. 用户注销 ...

  8. cxf客户端访问方式

    1.CXF是基于JAX-WS实现的,JAX-WS规范是一组XML web services的JAVA API,它使用户无需编写复杂的SOAP ENV,WSDL.在 JAX-WS中,一个远程调用可以转换 ...

  9. Linux设备驱动开发-linux驱动中的非阻塞访问方式

    前面已经详细分析过了阻塞访问方式,下面就来继续分析一下非阻塞的访问方式. 什么是非阻塞的访问方式呢?非阻塞操作的进程在不能进行设备操作时,并不挂起,他或者是放弃当前的进程执行,或者是不停地进行查询,知 ...

最新文章

  1. (转)C语言位运算详解
  2. 阿里面试题:分库分表无限扩容后的瓶颈以及解决方案
  3. rmReport 自适应行高(自动行高)
  4. 会计——会计核算前提、内容及方法
  5. 《Android插件化技术——原理篇》
  6. iOS之常用的正则表达式
  7. 前端---JavaScript基础4
  8. 2018年12月2526日
  9. 一次性缴纳6万元,退休后每月领1500元养老金,你愿意吗?
  10. glass fish_Glass Fish 4.0.1中的Jersey SSE功能
  11. jsp ejb mysql_关于UTF-8 JBoss,JSP,EJB,MySQL,STRUTS的中文处理方案
  12. XAMPP中mysql升级到5.7.36版本
  13. 数据结构实验二---单链表的实现
  14. 软件项目版本管理规范总结
  15. QQ三国推举孝廉答题工具使用说明
  16. QEMU虚拟磁盘资料
  17. DruidDataSource - abandon connection, owner thread: 错误原因
  18. 完整的微信登陆 接收消息流程
  19. wallpaper动态壁纸软件
  20. ERFNet网络的演化

热门文章

  1. Struts2升级版本到2.5.30遇到的一些问题和解决方式
  2. 第十周实验报告(任务三)【派生类2】
  3. 来自越南的泛泰binx一键解压_卡刷包制作工具
  4. python爬取斗图啦表情包并下载到本地
  5. 怎么在linux服务器上装jdk和mysql
  6. JavaSEday04
  7. vue js数字转换成汉字展示
  8. win7系统如何设置一键锁屏?
  9. size (A,dim) 指定维数 大小
  10. 机器学习笔试面试题——day3