Browse Source

提交服务不可用重试

wangkaiyue 3 years ago
parent
commit
c8323182f7
1 changed files with 27 additions and 13 deletions
  1. 27 13
      core/proxy/proxyServer.go

+ 27 - 13
core/proxy/proxyServer.go

@@ -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
+		}
+	}
 }