diff --git a/main.go b/main.go index fe26e9e..91cddf1 100644 --- a/main.go +++ b/main.go @@ -26,14 +26,14 @@ func StartServerProxy() { panic("熔断器初始化失败") } - // 绑定中间件:CORS -> IP限流 -> 用户限流 -> 熔断降级 -> 服务限流 -> 全局限流 + // 绑定中间件:CORS跨域 -> IP限流 -> 用户限流 -> 熔断降级 -> 服务限流 -> 全局限流 http.Httpserver.BindMiddlewareDefault( ghttp.MiddlewareCORS, - middleware.IPLimiter, // IP限流(防DDoS) - middleware.UserLimiter, // 用户限流(防止单用户滥用) - middleware.CircuitBreakerMiddleware, // ⭐ 熔断降级(保护后端服务) - middleware.ServiceLimiter, // 服务限流(保护微服务) - middleware.GlobalLimiter, // Redis全局限流(分布式支持) + //middleware.IPLimiter, // IP限流(防DDoS) + //middleware.UserLimiter, // 用户限流(防止单用户滥用) + //middleware.CircuitBreakerMiddleware, // ⭐ 熔断降级(保护后端服务) + //middleware.ServiceLimiter, // 服务限流(保护微服务) + //middleware.GlobalLimiter, // Redis全局限流(分布式支持) ) //使用默认http返回结构 // 熔断器健康检查接口 @@ -59,6 +59,28 @@ func StartServerProxy() { }) return } + + // 1. 解析 consul 配置地址 + consulAddr := g.Cfg().MustGet(r.GetCtx(), "consul.address").String() + consulAddrList := strings.Split(consulAddr, ":") + if len(consulAddrList) < 1 { + g.Log().Error(r.GetCtx(), "consul.address 配置格式错误") + r.Response.WriteJsonExit(map[string]interface{}{ + "success": false, + "code": 500, + "message": fmt.Sprintf("consul.address 配置格式错误:%s", consulAddr), + }) + return + } + ipStr := instanceAddr + if strings.Contains(instanceAddr, ":") { + ipStr = strings.Split(instanceAddr, ":")[0] + } + // 2. 如果不是本地IP,则替换为consul配置的IP + if !utils.IsLocalIP(ipStr) { + instanceAddr = strings.Replace(instanceAddr, ipStr, consulAddrList[0], 1) + } + r.Request.URL.Path = strings.Replace(r.Request.URL.Path, fmt.Sprintf("%s/", serverName), "", 1) r.MakeBodyRepeatableRead(false) u, _ := url.Parse(fmt.Sprintf("%s://%s", "http", instanceAddr))