二次开发rpcx-gateway支持非golang梳理

我们两清 提交于 2020-04-18 01:20:45

rpcx-gatewa的调用是是流程源码梳理

功能实现

  • API define handle 让网关支持自定义路由, 可以根据自定义的理由,网关直接调用相应的服务,直接是二层服务的架构,减少客户端(消费者)这一层程序
// 关键代码
 router.POST("/echo", g.EchoHandle)     // 消费echo服务

func (g *Gateway) EchoHandle(w http.ResponseWriter, r *http.Request, params httprouter.Params) {
  // API router的定义范例
  svc := "Echo"
  call := "Say"
  g.handleRequestApi(w, r, svc, call)

  • 在HttpRequest2RPCRequest的逻辑判断中,判断是否属于golang的服务端,分开进行服务端的调用逻辑,可灵活接入不同语言实现的服务端
// 判断是否为golang服务端的关键代码,非golang服务端会把语言的定义放在metadata里面
// 在创建xClient时,会根据语言的类型设置 isGo 属性
for _, v := range servers {
		if strings.Index(v, "typ=py") != -1 {
			// 为非go语言
			client.isGo = false 
			client.noGoServers = servers
			break
		} 
	}

要优化的地方

  • 性能方面目前不能完美结合rpcx的总体设计,这个要会加入后续feature
  • 目前支持python, 考虑支持java

详细源码地址: https://github.com/halokid/rpcx-gateway 与此二次开发版本匹配的rpcx项目源码: https://github.com/halokid/rpcx 开发完善后,会统一提PR :-)

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!