|
@@ -19,6 +19,8 @@ import (
|
|
|
var bManager = broker.InitBroker()
|
|
|
var routerManager *router.Manager
|
|
|
|
|
|
+const errTryTime = 10 //错误尝试
|
|
|
+
|
|
|
// InitGateWayServer 初始化网关服务
|
|
|
func InitGateWayServer() *ghttp.Server {
|
|
|
initCtx := gctx.New()
|
|
@@ -59,18 +61,30 @@ var proxyHandler = func(r *ghttp.Request) {
|
|
|
return
|
|
|
}
|
|
|
gCtx := router.GetGContext(r.GetCtx())
|
|
|
- //获取服务地址
|
|
|
- proxyAddr, err := bManager.GetServerAddr(gCtx.RouterRule.MiddleCode, r.GetClientIp())
|
|
|
- if err != nil {
|
|
|
- r.SetError(err)
|
|
|
- return
|
|
|
- }
|
|
|
- //代理地址存入ctx中
|
|
|
- gCtx.ServerAddr = proxyAddr.String()
|
|
|
- router.UpdateGContext(r, gCtx)
|
|
|
- errHandel := func(hw http.ResponseWriter, hr *http.Request, err error) {
|
|
|
- r.SetError(NewErrorWithCode(GATEWAY_PROXY_ERR, fmt.Sprintf("代理异常:%s err:%v \n", gCtx.ServerAddr, err.Error())))
|
|
|
- }
|
|
|
|
|
|
- proxyClient.CreateCustomProxyClient(proxyAddr, errHandel).ServeHTTP(r.Response.ResponseWriter, r.Request)
|
|
|
+ for i := 0; i < errTryTime; i++ {
|
|
|
+ //获取服务地址
|
|
|
+ proxyAddr, err := bManager.GetServerAddr(gCtx.RouterRule.MiddleCode, r.GetClientIp())
|
|
|
+ if err != nil {
|
|
|
+ r.SetError(err)
|
|
|
+ return
|
|
|
+ }
|
|
|
+ //代理地址存入ctx中
|
|
|
+ gCtx.ServerAddr = proxyAddr.String()
|
|
|
+ router.UpdateGContext(r, gCtx)
|
|
|
+
|
|
|
+ var hasErr bool
|
|
|
+
|
|
|
+ errHandel := func(hw http.ResponseWriter, hr *http.Request, err error) {
|
|
|
+ hasErr = true
|
|
|
+ if i == (errTryTime - 1) {
|
|
|
+ r.SetError(NewErrorWithCode(GATEWAY_PROXY_ERR, fmt.Sprintf("代理异常:%s err:%v \n", gCtx.ServerAddr, err.Error())))
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ proxyClient.CreateCustomProxyClient(proxyAddr, errHandel).ServeHTTP(r.Response.ResponseWriter, r.Request)
|
|
|
+ if !hasErr {
|
|
|
+ return
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|