Compare commits

...

3 Commits

Author SHA1 Message Date
李寻欢 c5fd71b542 🚑 简化反向代理写法
continuous-integration/drone/push Build is passing Details
2021-09-24 13:53:49 +08:00
李寻欢 c18b6059f3 📝 完善注释 2021-09-10 13:37:07 +08:00
李寻欢 c8af406b04 完善Nacos注册逻辑 2021-09-09 13:54:39 +08:00
4 changed files with 18 additions and 50 deletions

3
.env
View File

@ -7,7 +7,8 @@ NACOS_HOST=
NACOS_PORT=8848
# 命名空间用默认的public的话这儿就不写
NACOS_NAMESPACE=
# 除本文件以外的其他托管到Nacos的配置文件如果有多个则以半角分号`;`隔开 Ps. 后面可以把NACOS_*和系统启动相关的留着其他的全部托管到Nacos
# 除本文件以外的其他托管到Nacos的配置文件如果有多个则以半角分号`;`隔开
# Ps. 后面可以把NACOS_*和系统启动相关的留着其他的全部托管到Nacos
NACOS_CONFIG_NAME=gateway.yml
# 系统启动配置
# Jaeger链路追踪

View File

@ -6,8 +6,9 @@ import (
"github.com/nacos-group/nacos-sdk-go/clients/config_client"
"github.com/nacos-group/nacos-sdk-go/clients/naming_client"
"github.com/nacos-group/nacos-sdk-go/vo"
"io/ioutil"
"net/http"
"net/http/httputil"
"net/url"
"strings"
)
@ -59,33 +60,17 @@ func (n nacosClient) Remote(ctx *gin.Context) {
apiHost = fmt.Sprintf("%s:%v", instance.Ip, instance.Port)
}
// 组装内部接口
apiUrl := fmt.Sprintf("http://%v%v", apiHost, uri)
// 创建Request对象
req, err := http.NewRequest(ctx.Request.Method, apiUrl, ctx.Request.Body)
if err != nil {
Log.Error("请求异常: %v\n", err)
ctx.String(http.StatusBadGateway, "请求异常: %v", err.Error())
return
u := &url.URL{
Scheme: "http",
Host: apiHost,
}
// 填充Form参数(大概率用不上)
req.Form = ctx.Request.Form
// 填充链路追踪标记
req.Header.Add("uber-trace-id", ctx.GetString("UberTraceId"))
// 请求ID
req.Header.Add("X-Request-Id", ctx.GetString("X-Request-Id"))
// 设置来源
req.Header.Add("From", "internal")
// 发起请求
client := &http.Client{}
response, err := client.Do(req)
if err != nil {
Log.Error("请求异常: %v\n", err)
ctx.String(http.StatusBadGateway, "请求异常:%v", err.Error())
return
proxy := httputil.NewSingleHostReverseProxy(u)
ctx.Request.Header.Add("From", "internal")
ctx.Request.Header.Add("uber-trace-id", ctx.GetString("UberTraceId"))
// 重写错误回调
proxy.ErrorHandler = func(w http.ResponseWriter, r *http.Request, err error) {
Log.Error("代理转发错误: %v", err.Error())
ctx.String(http.StatusInternalServerError, "系统内部错误")
}
// 返回结果到前端
sss, _ := ioutil.ReadAll(response.Body)
Log.Debug(string(sss))
ctx.String(response.StatusCode, string(sss))
proxy.ServeHTTP(ctx.Writer, ctx.Request)
}

View File

@ -35,7 +35,7 @@ func initNacos() {
if err != nil {
panic(err)
}
ip := "gateway"
ip := config.AppInfo.AppName
if ips := utils.GetIps(); ips != nil {
ip = ips[0]
}
@ -45,7 +45,7 @@ func initNacos() {
Weight: 10,
Enable: true,
Healthy: true,
ServiceName: "gateway",
ServiceName: config.AppInfo.AppName,
Ephemeral: true,
})
core.Log.Debug("Nacos注册结果: %v", success)
@ -80,7 +80,7 @@ func initNacos() {
// 读取初始配置
core.NacosClient = core.NewNacosClient(client, configClient)
configStr, err := configClient.GetConfig(vo.ConfigParam{DataId: "gateway.yml", Group: "DEFAULT_GROUP"})
configStr, err := configClient.GetConfig(vo.ConfigParam{DataId: config.NacosConfig.CenterConfigName, Group: "DEFAULT_GROUP"})
if err != nil {
core.Log.Panic("读取配置文件错误: %v", err.Error())
}

18
main.go
View File

@ -19,23 +19,5 @@ func main() {
app.Any("/*action", core.NacosClient.Remote)
//app.GET("/hello", func(context *gin.Context) {
// dd := context.GetString("UberTraceId")
// //log.Println("数据是否存在: ", boo)
// //if boo {
// // log.Println(dd)
// //}
// context.String(http.StatusOK, get("get", context.Request.RequestURI, context.GetString("X-Request-Id"), dd))
//})
//
//app.POST("/hello", func(context *gin.Context) {
// context.String(http.StatusOK, post(context.Request.RequestURI))
//})
//
//app.GET("/ip", func(context *gin.Context) {
// dd := context.GetString("UberTraceId")
// context.String(http.StatusOK, get("get", context.Request.RequestURI, context.GetString("X-Request-Id"), dd))
//})
_ = app.Run(fmt.Sprintf(":%v", config.AppInfo.Port))
}