This commit is contained in:
parent
4fe735ce0d
commit
feb62f12b7
@ -6,14 +6,22 @@ import (
|
|||||||
|
|
||||||
type Config struct {
|
type Config struct {
|
||||||
Gateway struct {
|
Gateway struct {
|
||||||
Routes []struct {
|
Routes []Route `yaml:"routes"`
|
||||||
Path string `yaml:"path"`
|
|
||||||
Service string `yaml:"service"`
|
|
||||||
Enable bool `yaml:"enable"`
|
|
||||||
} `yaml:"routes"`
|
|
||||||
} `yaml:"gateway"`
|
} `yaml:"gateway"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type Route struct {
|
||||||
|
Path string `yaml:"path"`
|
||||||
|
Service string `yaml:"service"`
|
||||||
|
Enable bool `yaml:"enable"`
|
||||||
|
Lb Lb `yaml:"lb"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type Lb struct {
|
||||||
|
Host string `yaml:"host"`
|
||||||
|
Port int `yaml:"port"`
|
||||||
|
}
|
||||||
|
|
||||||
func ConfigChanged(data string) {
|
func ConfigChanged(data string) {
|
||||||
// 从配置文件解析为对象
|
// 从配置文件解析为对象
|
||||||
config := Config{}
|
config := Config{}
|
||||||
@ -23,9 +31,9 @@ func ConfigChanged(data string) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
rs := config.Gateway.Routes
|
rs := config.Gateway.Routes
|
||||||
var sma []serviceMap
|
var sma []serviceItem
|
||||||
for _, r := range rs {
|
for _, r := range rs {
|
||||||
item := NewServiceMapItem(r.Path, r.Service, r.Enable)
|
item := NewServiceMapItem(r.Path, r.Service, r.Enable, r.Lb)
|
||||||
sma = append(sma, item)
|
sma = append(sma, item)
|
||||||
}
|
}
|
||||||
ServiceMap = sma
|
ServiceMap = sma
|
||||||
|
@ -2,6 +2,6 @@ package core
|
|||||||
|
|
||||||
var (
|
var (
|
||||||
NacosClient nacosClient
|
NacosClient nacosClient
|
||||||
ServiceMap []serviceMap
|
ServiceMap []serviceItem
|
||||||
Log Logger
|
Log Logger
|
||||||
)
|
)
|
||||||
|
@ -26,7 +26,7 @@ func (n nacosClient) Remote(ctx *gin.Context) {
|
|||||||
uri := ctx.Request.RequestURI
|
uri := ctx.Request.RequestURI
|
||||||
// 截取第二个/前面那一段
|
// 截取第二个/前面那一段
|
||||||
pathAry := strings.Split(uri, "/")
|
pathAry := strings.Split(uri, "/")
|
||||||
var service serviceMap
|
var service serviceItem
|
||||||
apiService := fmt.Sprintf("/%v", pathAry[1])
|
apiService := fmt.Sprintf("/%v", pathAry[1])
|
||||||
for _, s := range ServiceMap {
|
for _, s := range ServiceMap {
|
||||||
if s.Path != "" && s.Path == apiService {
|
if s.Path != "" && s.Path == apiService {
|
||||||
@ -43,17 +43,24 @@ func (n nacosClient) Remote(ctx *gin.Context) {
|
|||||||
ctx.String(http.StatusServiceUnavailable, "系统维护中")
|
ctx.String(http.StatusServiceUnavailable, "系统维护中")
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
var apiHost string
|
||||||
instance, err := n.client.SelectOneHealthyInstance(vo.SelectOneHealthInstanceParam{
|
// 判断是否是走集群内部负载
|
||||||
ServiceName: service.Service,
|
if service.Lb.Host != "" {
|
||||||
})
|
apiHost = fmt.Sprintf("%s:%v", service.Lb.Host, service.Lb.Port)
|
||||||
if err != nil {
|
} else {
|
||||||
Log.Error("获取健康服务失败: %v\n", err.Error())
|
instance, err := n.client.SelectOneHealthyInstance(vo.SelectOneHealthInstanceParam{
|
||||||
ctx.String(http.StatusBadGateway, "服务异常: %v", err.Error())
|
ServiceName: service.Service,
|
||||||
return
|
})
|
||||||
|
if err != nil {
|
||||||
|
Log.Error("获取健康服务失败: %v\n", err.Error())
|
||||||
|
ctx.String(http.StatusBadGateway, "服务异常: %v", err.Error())
|
||||||
|
return
|
||||||
|
}
|
||||||
|
apiHost = fmt.Sprintf("%s:%v", instance.Ip, instance.Port)
|
||||||
}
|
}
|
||||||
|
|
||||||
// 组装内部接口
|
// 组装内部接口
|
||||||
apiUrl := fmt.Sprintf("http://%v:%v%v", instance.Ip, instance.Port, uri)
|
apiUrl := fmt.Sprintf("http://%v%v", apiHost, uri)
|
||||||
// 创建Request对象
|
// 创建Request对象
|
||||||
req, err := http.NewRequest(ctx.Request.Method, apiUrl, ctx.Request.Body)
|
req, err := http.NewRequest(ctx.Request.Method, apiUrl, ctx.Request.Body)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -1,16 +1,17 @@
|
|||||||
package core
|
package core
|
||||||
|
|
||||||
type serviceMap struct {
|
type serviceItem struct {
|
||||||
Path string
|
Path string
|
||||||
Service string
|
Service string
|
||||||
Enable bool
|
Enable bool
|
||||||
|
Lb Lb
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewServiceMapItem(k, v string, e bool) serviceMap {
|
func NewServiceMapItem(k, v string, e bool, lb Lb) serviceItem {
|
||||||
//var sma []serviceMap
|
//var sma []serviceItem
|
||||||
// 从Nacos读取规则
|
// 从Nacos读取规则
|
||||||
// gateway:
|
// gateway:
|
||||||
// - path: /user
|
// - path: /user
|
||||||
// service: mb-user-service
|
// service: mb-user-service
|
||||||
return serviceMap{k, v, e}
|
return serviceItem{k, v, e, lb}
|
||||||
}
|
}
|
||||||
|
@ -38,11 +38,15 @@ func OpenTracing() gin.HandlerFunc {
|
|||||||
asd := fmt.Sprintf("%v", parentSpan.Context())
|
asd := fmt.Sprintf("%v", parentSpan.Context())
|
||||||
c.Set("UberTraceId", asd)
|
c.Set("UberTraceId", asd)
|
||||||
c.Set("ParentSpanContext", parentSpan.Context())
|
c.Set("ParentSpanContext", parentSpan.Context())
|
||||||
|
// 设置接口地址
|
||||||
|
ext.HTTPUrl.Set(parentSpan, c.Request.RequestURI)
|
||||||
|
// 设置请求方式
|
||||||
|
ext.HTTPMethod.Set(parentSpan, c.Request.Method)
|
||||||
|
// 执行后续操作
|
||||||
c.Next()
|
c.Next()
|
||||||
|
// 设置返回状态码
|
||||||
ext.HTTPStatusCode.Set(parentSpan, uint16(c.Writer.Status()))
|
ext.HTTPStatusCode.Set(parentSpan, uint16(c.Writer.Status()))
|
||||||
|
// 如果状态码大于299,设置错误标签
|
||||||
if c.Writer.Status() > 299 {
|
if c.Writer.Status() > 299 {
|
||||||
ext.Error.Set(parentSpan, true)
|
ext.Error.Set(parentSpan, true)
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user