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 :-)
来源:oschina
链接:https://my.oschina.net/u/615967/blog/3271527