grpc提供http访问方式
0x00
最近系统在从c++
迁移到go
,之前使用brpc
,也需要转移到grpc
,但是grpc
提供的接口服务原生无法被http
访问到,这对我们调试来说也很麻烦,所以需要让grpc
跟brpc
一样,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
的端口为8989
,endpoint
指向了grpc
服务的端口7777
。
postman访问
访问成功
缺点
- 需要开2个端口
- 写多余的代码
理想情况下应该有个插件自己把http
请求转换成proto
的方式,犹如brpc
一样
解决方法
后来发现https的方式是可以解决上面的问题,grpc和https端口在一起,也不用起两个服务。
grpc https gateway
20190621更新
同事用https://github.com/soheilhy/cmux把多个协议的服务都绑定到一起了
grpc提供http访问方式相关推荐
- Kubernetes的三种集群外部访问方式及使用场景说明:NodePort、LoadBalancer和Ingress
Kubernetes的三种外部访问方式:NodePort.LoadBalancer和Ingress 最近有些同学问我 NodePort,LoadBalancer 和 Ingress 之间的区别.它们都 ...
- Kubernetes的三种外部访问方式:NodePort、LoadBalancer和Ingress
Kubernetes的三种外部访问方式:NodePort.LoadBalancer和Ingress(转发) 原文 http://cloud.51cto.com/art/201804/570386.ht ...
- Kubernetes的Service外部访问方式:NodePort和LoadBalancer
Kubernetes的Service外部访问方式:NodePort和LoadBalancer 关注公众号 风色年代(itfantasycc) 300G微服务资料等你拿! Kubernetes的Pod的 ...
- php 访问类成员,PHP类成员的访问方式和权限_PHP教程
PHP5的访问方式允许限制对类成员的访问. 这是在PHP5中新增的功能,但在许多面向对象语言中都早已存在. 有了访问方式,才能开发一个可靠的面向对象应用程序,并且构建可重用的面向对象类库. 像C++和 ...
- 浅谈企业IT应用的访问方式之:乱想
近来手上的几大块事情,算是大头朝下了.后面可能更多是跟公司的最终用户打交道,一套完整的应用服务体系,不光只是服务器平台的搭建.更重要的是如何让用户觉得确实给他们带来了帮助. 在非洲的一 ...
- 理解Kubernetes(2): 应用的各种访问方式
理解Kubernetes系列文章: 手工搭建环境 应用的各种访问方式 1. 通过 Pod 的 IP 地址访问应用 1.1 Pod 的IP地址 每个Pod 都会被分配一个IP地址,比如下面这儿pod的I ...
- 项目一:第十二天 1、常见权限控制方式 2、基于shiro提供url拦截方式验证权限 3、在realm中授权 5、总结验证权限方式(四种) 6、用户注销7、基于treegrid实现菜单展示...
1 课程计划 1. 常见权限控制方式 2. 基于shiro提供url拦截方式验证权限 3. 在realm中授权 4. 基于shiro提供注解方式验证权限 5. 总结验证权限方式(四种) 6. 用户注销 ...
- cxf客户端访问方式
1.CXF是基于JAX-WS实现的,JAX-WS规范是一组XML web services的JAVA API,它使用户无需编写复杂的SOAP ENV,WSDL.在 JAX-WS中,一个远程调用可以转换 ...
- Linux设备驱动开发-linux驱动中的非阻塞访问方式
前面已经详细分析过了阻塞访问方式,下面就来继续分析一下非阻塞的访问方式. 什么是非阻塞的访问方式呢?非阻塞操作的进程在不能进行设备操作时,并不挂起,他或者是放弃当前的进程执行,或者是不停地进行查询,知 ...
最新文章
- (转)C语言位运算详解
- 阿里面试题:分库分表无限扩容后的瓶颈以及解决方案
- rmReport 自适应行高(自动行高)
- 会计——会计核算前提、内容及方法
- 《Android插件化技术——原理篇》
- iOS之常用的正则表达式
- 前端---JavaScript基础4
- 2018年12月2526日
- 一次性缴纳6万元,退休后每月领1500元养老金,你愿意吗?
- glass fish_Glass Fish 4.0.1中的Jersey SSE功能
- jsp ejb mysql_关于UTF-8 JBoss,JSP,EJB,MySQL,STRUTS的中文处理方案
- XAMPP中mysql升级到5.7.36版本
- 数据结构实验二---单链表的实现
- 软件项目版本管理规范总结
- QQ三国推举孝廉答题工具使用说明
- QEMU虚拟磁盘资料
- DruidDataSource - abandon connection, owner thread: 错误原因
- 完整的微信登陆 接收消息流程
- wallpaper动态壁纸软件
- ERFNet网络的演化