dockerfile修改
This commit is contained in:
34
main.go
34
main.go
@@ -26,14 +26,14 @@ func StartServerProxy() {
|
|||||||
panic("熔断器初始化失败")
|
panic("熔断器初始化失败")
|
||||||
}
|
}
|
||||||
|
|
||||||
// 绑定中间件:CORS -> IP限流 -> 用户限流 -> 熔断降级 -> 服务限流 -> 全局限流
|
// 绑定中间件:CORS跨域 -> IP限流 -> 用户限流 -> 熔断降级 -> 服务限流 -> 全局限流
|
||||||
http.Httpserver.BindMiddlewareDefault(
|
http.Httpserver.BindMiddlewareDefault(
|
||||||
ghttp.MiddlewareCORS,
|
ghttp.MiddlewareCORS,
|
||||||
middleware.IPLimiter, // IP限流(防DDoS)
|
//middleware.IPLimiter, // IP限流(防DDoS)
|
||||||
middleware.UserLimiter, // 用户限流(防止单用户滥用)
|
//middleware.UserLimiter, // 用户限流(防止单用户滥用)
|
||||||
middleware.CircuitBreakerMiddleware, // ⭐ 熔断降级(保护后端服务)
|
//middleware.CircuitBreakerMiddleware, // ⭐ 熔断降级(保护后端服务)
|
||||||
middleware.ServiceLimiter, // 服务限流(保护微服务)
|
//middleware.ServiceLimiter, // 服务限流(保护微服务)
|
||||||
middleware.GlobalLimiter, // Redis全局限流(分布式支持)
|
//middleware.GlobalLimiter, // Redis全局限流(分布式支持)
|
||||||
) //使用默认http返回结构
|
) //使用默认http返回结构
|
||||||
|
|
||||||
// 熔断器健康检查接口
|
// 熔断器健康检查接口
|
||||||
@@ -59,6 +59,28 @@ func StartServerProxy() {
|
|||||||
})
|
})
|
||||||
return
|
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.Request.URL.Path = strings.Replace(r.Request.URL.Path, fmt.Sprintf("%s/", serverName), "", 1)
|
||||||
r.MakeBodyRepeatableRead(false)
|
r.MakeBodyRepeatableRead(false)
|
||||||
u, _ := url.Parse(fmt.Sprintf("%s://%s", "http", instanceAddr))
|
u, _ := url.Parse(fmt.Sprintf("%s://%s", "http", instanceAddr))
|
||||||
|
|||||||
Reference in New Issue
Block a user