From 9b2d0874fb1115423c329e8e4f337f145e65540b Mon Sep 17 00:00:00 2001 From: qhd <1766646056@qq.com> Date: Mon, 13 Apr 2026 14:52:08 +0800 Subject: [PATCH 1/2] =?UTF-8?q?feat:=20=E6=9B=BF=E6=8D=A2=E9=9D=9E?= =?UTF-8?q?=E6=9C=AC=E5=9C=B0=E5=AE=9E=E4=BE=8B=E5=9C=B0=E5=9D=80=E4=B8=BA?= =?UTF-8?q?Consul=E9=85=8D=E7=BD=AEIP?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- main.go | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/main.go b/main.go index fe26e9e..5211973 100644 --- a/main.go +++ b/main.go @@ -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)) From 0ef2a5d426e3a55f9daf7d881e56999343e36ad4 Mon Sep 17 00:00:00 2001 From: qhd <1766646056@qq.com> Date: Wed, 22 Apr 2026 15:34:22 +0800 Subject: [PATCH 2/2] =?UTF-8?q?chore:=20=E4=B8=B4=E6=97=B6=E7=A6=81?= =?UTF-8?q?=E7=94=A8=E9=99=90=E6=B5=81=E4=B8=AD=E9=97=B4=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- main.go | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/main.go b/main.go index 5211973..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返回结构 // 熔断器健康检查接口