Compare commits

..

3 Commits

Author SHA1 Message Date
李寻欢
c5fd71b542 🚑 简化反向代理写法
All checks were successful
continuous-integration/drone/push Build is passing
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 NACOS_PORT=8848
# 命名空间用默认的public的话这儿就不写 # 命名空间用默认的public的话这儿就不写
NACOS_NAMESPACE= NACOS_NAMESPACE=
# 除本文件以外的其他托管到Nacos的配置文件如果有多个则以半角分号`;`隔开 Ps. 后面可以把NACOS_*和系统启动相关的留着其他的全部托管到Nacos # 除本文件以外的其他托管到Nacos的配置文件如果有多个则以半角分号`;`隔开
# Ps. 后面可以把NACOS_*和系统启动相关的留着其他的全部托管到Nacos
NACOS_CONFIG_NAME=gateway.yml NACOS_CONFIG_NAME=gateway.yml
# 系统启动配置 # 系统启动配置
# Jaeger链路追踪 # 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/config_client"
"github.com/nacos-group/nacos-sdk-go/clients/naming_client" "github.com/nacos-group/nacos-sdk-go/clients/naming_client"
"github.com/nacos-group/nacos-sdk-go/vo" "github.com/nacos-group/nacos-sdk-go/vo"
"io/ioutil"
"net/http" "net/http"
"net/http/httputil"
"net/url"
"strings" "strings"
) )
@ -59,33 +60,17 @@ func (n nacosClient) Remote(ctx *gin.Context) {
apiHost = fmt.Sprintf("%s:%v", instance.Ip, instance.Port) apiHost = fmt.Sprintf("%s:%v", instance.Ip, instance.Port)
} }
// 组装内部接口 u := &url.URL{
apiUrl := fmt.Sprintf("http://%v%v", apiHost, uri) Scheme: "http",
// 创建Request对象 Host: apiHost,
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
} }
// 填充Form参数(大概率用不上) proxy := httputil.NewSingleHostReverseProxy(u)
req.Form = ctx.Request.Form ctx.Request.Header.Add("From", "internal")
// 填充链路追踪标记 ctx.Request.Header.Add("uber-trace-id", ctx.GetString("UberTraceId"))
req.Header.Add("uber-trace-id", ctx.GetString("UberTraceId")) // 重写错误回调
// 请求ID proxy.ErrorHandler = func(w http.ResponseWriter, r *http.Request, err error) {
req.Header.Add("X-Request-Id", ctx.GetString("X-Request-Id")) Log.Error("代理转发错误: %v", err.Error())
// 设置来源 ctx.String(http.StatusInternalServerError, "系统内部错误")
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.ServeHTTP(ctx.Writer, ctx.Request)
sss, _ := ioutil.ReadAll(response.Body)
Log.Debug(string(sss))
ctx.String(response.StatusCode, string(sss))
} }

View File

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

18
main.go
View File

@ -19,23 +19,5 @@ func main() {
app.Any("/*action", core.NacosClient.Remote) 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)) _ = app.Run(fmt.Sprintf(":%v", config.AppInfo.Port))
} }