Parcourir la source

wip:增加jaeger

wangkaiyue il y a 2 ans
Parent
commit
06afd4f19e

+ 4 - 0
core/proxy/broker/broker.go

@@ -5,6 +5,7 @@ import (
 	"bp.jydev.jianyu360.cn/BaseService/gateway/core/proxy/loadmodule"
 	"fmt"
 	"github.com/gogf/gf/v2/net/ghttp"
+	"github.com/gogf/gf/v2/net/gtrace"
 	"github.com/gogf/gf/v2/os/gcfg"
 	"github.com/gogf/gf/v2/os/gctx"
 	"log"
@@ -88,6 +89,9 @@ func UnLoginSetErr(resp *http.Response) error {
 
 // GetOutSeverAutoLogin 获取代理节点
 func (b *broker) GetOutSeverAutoLogin(address string, r *ghttp.Request) (serverUrl *url.URL, err error) {
+	_, span := gtrace.NewSpan(r.Context(), "GetOutSeverAutoLogin")
+	defer span.End()
+
 	serverUrl, err = url.Parse(address)
 	if err != nil {
 		return nil, err

+ 3 - 0
core/proxy/middleware/errorHandler.go

@@ -6,11 +6,14 @@ import (
 	"github.com/gogf/gf/v2/errors/gcode"
 	"github.com/gogf/gf/v2/errors/gerror"
 	"github.com/gogf/gf/v2/net/ghttp"
+	"github.com/gogf/gf/v2/net/gtrace"
 )
 
 // ErrorHandler 统一异常拦截、提醒,及日志打印中间件
 func ErrorHandler(r *ghttp.Request) {
 	r.Middleware.Next()
+	_, span := gtrace.NewSpan(r.Context(), "ErrorHandler")
+	defer span.End()
 	// 程序异常信息处理
 	err := r.GetError()
 	if err != nil {

+ 27 - 14
core/proxy/middleware/filterFuncs.go

@@ -2,6 +2,7 @@ package middleware
 
 import (
 	"fmt"
+	"github.com/gogf/gf/v2/net/gtrace"
 	"net/url"
 	"strings"
 
@@ -22,22 +23,26 @@ import (
 // step 2: 账户状态校验
 // step 3: 接口权益校验
 func filterBefore(r *ghttp.Request) error {
-	ctx := router.GetGContext(r.GetCtx())
-	rule := ctx.RouterRule
+	ctx, span := gtrace.NewSpan(r.Context(), "filterBefore")
+	defer span.End()
+	//r.SetCtx(ctx)
+
+	context := router.GetGContext(ctx)
+	rule := context.RouterRule
 
 	if rule.SessCheck.NeedCheck() {
 		uCheck, eCheck := rule.SessCheck.CheckUserSession(), rule.SessCheck.CheckEntSession()
-		if uCheck && ctx.Sess.UserId == "" {
+		if uCheck && context.Sess.UserId == "" {
 			return NewErrorWithCode(GLOBAL_ERR_NOTLOGIN)
 		}
-		if eCheck && ctx.Sess.EntId == 0 {
+		if eCheck && context.Sess.EntId == 0 {
 			return NewErrorWithCode(GLOBAL_ERR_NOENT_SELECT)
 		}
 	}
 
 	//校验账户状态,校验认证状态
 	if rule.AccountCheck.NeedCheck() || rule.AuthCheck.NeedCheck() {
-		if err := rpc.CheckAccountStatus(ctx.Sess.EntId, ctx.Sess.UserId, rule); err != nil {
+		if err := rpc.CheckAccountStatus(ctx, context.Sess.EntId, context.Sess.UserId, rule); err != nil {
 			return err
 		}
 	}
@@ -45,11 +50,11 @@ func filterBefore(r *ghttp.Request) error {
 	//校验权益
 	var powerErr error
 	if rule.PowerCheck == 1 {
-		useCount, surplusCount, powerErr = rpc.CheckResourcePower(ctx.Sess.AccountId, ctx.Sess.EntAccountId, ctx.Sess.EntId, ctx.Sess.EntUserId, rule.FuncCode, r.GetHeader("functionCode"), rule.AppId)
+		useCount, surplusCount, powerErr = rpc.CheckResourcePower(ctx, context.Sess.AccountId, context.Sess.EntAccountId, context.Sess.EntId, context.Sess.EntUserId, rule.FuncCode, r.GetHeader("functionCode"), rule.AppId)
 	}
 	//老剑鱼用户身份判断
 	if powerErr == nil && rule.PowerType > 0 {
-		powerErr = rpc.CheckUserPower(rule.PowerType, rule.AppId, ctx.Sess.MgoUserId, ctx.Sess.NewUid, ctx.Sess.AccountId, ctx.Sess.EntId, ctx.Sess.PositionType, ctx.Sess.PositionId)
+		powerErr = rpc.CheckUserPower(ctx, rule.PowerType, rule.AppId, context.Sess.MgoUserId, context.Sess.NewUid, context.Sess.AccountId, context.Sess.EntId, context.Sess.PositionType, context.Sess.PositionId)
 	}
 	if rule.NoPowerUrl == "" && powerErr != nil {
 		return powerErr
@@ -63,7 +68,7 @@ func filterBefore(r *ghttp.Request) error {
 	}
 
 	//注入用户身份
-	infusionIdentity(r, ctx.Sess, useCount, surplusCount, rule.AppId)
+	infusionHeader(r, context.Sess, useCount, surplusCount, rule.AppId)
 	//外部程序过滤器
 	if rule.IsOutServer {
 		//赛思用户身份注入
@@ -78,11 +83,15 @@ func filterBefore(r *ghttp.Request) error {
 // filterAfter 后置扣减逻辑。
 // 同步处理,若扣减异常,接口返回错误信息。
 func filterAfter(r *ghttp.Request) (err error) {
-	ctx := router.GetGContext(r.GetCtx())
+	ctx, span := gtrace.NewSpan(r.Context(), "filterAfter")
+	defer span.End()
+	//r.SetCtx(ctx)
+
+	context := router.GetGContext(ctx)
 	if r.GetError() != nil {
 		return
 	}
-	rule := ctx.RouterRule
+	rule := context.RouterRule
 	// 响应完成,判断是否扣除
 	if rule.Deduct != 0 {
 		var ids []string
@@ -100,12 +109,12 @@ func filterAfter(r *ghttp.Request) (err error) {
 		if deductNum > 0 { //资源接口异常
 			if rule.Deduct > 0 { //扣减
 				fmt.Println("扣减", deductNum, ids)
-				if err = rpc.ResourcePowerDeduct(ctx.Sess.AccountId, ctx.Sess.EntAccountId, rule.FuncCode, rule.AppId, deductNum, ids); err != nil {
+				if err = rpc.ResourcePowerDeduct(ctx, context.Sess.AccountId, context.Sess.EntAccountId, rule.FuncCode, rule.AppId, deductNum, ids); err != nil {
 					return err
 				}
 			} else { //充值
 				fmt.Println("充值", deductNum, ids)
-				if err = rpc.ResourcePowerRecharge(ctx.Sess.AccountId, ctx.Sess.EntAccountId, rule.FuncCode, rule.AppId, deductNum, ids); err != nil {
+				if err = rpc.ResourcePowerRecharge(ctx, context.Sess.AccountId, context.Sess.EntAccountId, rule.FuncCode, rule.AppId, deductNum, ids); err != nil {
 					return err
 				}
 			}
@@ -117,6 +126,8 @@ func filterAfter(r *ghttp.Request) (err error) {
 
 // GetResponseJsonAndClear 获取接口返回参数,并删除扣减预留字段
 func GetResponseJsonAndClear(r *ghttp.Request) (deductNum int64, ids []string, err error) {
+	_, span := gtrace.NewSpan(r.Context(), "GetResponseJsonAndClear")
+	defer span.End()
 	respJson := gconv.Map(r.Response.Buffer())
 	defer func() {
 		r.Response.ClearBuffer()
@@ -144,8 +155,10 @@ func GetResponseJsonAndClear(r *ghttp.Request) (deductNum int64, ids []string, e
 	return
 }
 
-// infusionIdentity 用户身份注入Header  有则注入
-func infusionIdentity(r *ghttp.Request, sess *router.JySession, useCount, surplusCount int64, appId string) {
+// infusionHeader 用户身份注入Header  有则注入
+func infusionHeader(r *ghttp.Request, sess *router.JySession, useCount, surplusCount int64, appId string) {
+	_, span := gtrace.NewSpan(r.GetCtx(), "infusionHeader")
+	defer span.End()
 	r.Header.Set("appId", appId)
 	if sess.UserId != "" {
 		r.Header.Set("userId", sess.UserId)

+ 36 - 31
core/proxy/middleware/spiderPolyHandler.go

@@ -8,6 +8,7 @@ import (
 	"bp.jydev.jianyu360.cn/BaseService/gateway/core/router"
 	"fmt"
 	"github.com/gogf/gf/v2/net/ghttp"
+	"github.com/gogf/gf/v2/net/gtrace"
 	"strings"
 )
 
@@ -23,40 +24,44 @@ func InitFilterPolyManager() {
 }
 
 func FilterPolyHandler(r *ghttp.Request) {
-	ctx := r.GetCtx()
-	gCtx := router.GetGContext(ctx)
-	//获取策略
-	poly := filterPolyManager.GetRule(gCtx.RouterRule.LimitPloy)
-	status, key := func() (int, string) {
-		//用户身份切换
-		userFlag, _ := common.If(gCtx.Sess.MgoUserId != "", gCtx.Sess.MgoUserId, gCtx.Sess.UserId).(string)
-		if gCtx.Sess.UserId != "" && poly.Rule.BCheckId { //id请求频率校验
-			return poly.IdFilter(ctx, userFlag)
-		} else { //ip请求频率校验
-			return poly.IpFilter(ctx, r.GetClientIp())
+	func() {
+		ctx, span := gtrace.NewSpan(r.Context(), "FilterPolyHandler")
+		defer span.End()
+
+		gCtx := router.GetGContext(ctx)
+		//获取策略
+		poly := filterPolyManager.GetRule(gCtx.RouterRule.LimitPloy)
+		status, key := func() (int, string) {
+			//用户身份切换
+			userFlag, _ := common.If(gCtx.Sess.MgoUserId != "", gCtx.Sess.MgoUserId, gCtx.Sess.UserId).(string)
+			if gCtx.Sess.UserId != "" && poly.Rule.BCheckId { //id请求频率校验
+				return poly.IdFilter(ctx, userFlag)
+			} else { //ip请求频率校验
+				return poly.IpFilter(ctx, r.GetClientIp())
+			}
+		}()
+		returnHtml := false
+		if strings.Contains(strings.ToLower(r.Header.Get("Accept")), "html") {
+			returnHtml = true
 		}
-	}()
-	returnHtml := false
-	if strings.Contains(strings.ToLower(r.Header.Get("Accept")), "html") {
-		returnHtml = true
-	}
-	//是否开启黑名单
-	if status == -1 { //黑名单 不响应
-		r.SetError(NewErrorWithCode(OTHER_ERR_OFTEN, fmt.Sprintf("请求频繁限制")))
-		r.Response.ResponseWriter.WriteHeader(403)
-		return
-	}
-	if status == 2 { //处理验证码逻辑
-		rData := poly.VerifyHandle(r.Request, key)
-		if !returnHtml {
-			r.Response.WriteJsonExit(rData)
-		} else {
-			if renderErr := httpUtil.Render(r.Response.ResponseWriter, getVerifyPage(poly.Rule.VerifyPage), &rData); renderErr != nil {
-				r.SetError(NewErrorWithCode(GATEWAY_HTML_RENDER_ERR, fmt.Sprintf("验证码页面:%v\n", renderErr)))
+		//是否开启黑名单
+		if status == -1 { //黑名单 不响应
+			r.SetError(NewErrorWithCode(OTHER_ERR_OFTEN, fmt.Sprintf("请求频繁限制")))
+			r.Response.ResponseWriter.WriteHeader(403)
+			return
+		}
+		if status == 2 { //处理验证码逻辑
+			rData := poly.VerifyHandle(r.Request, key)
+			if !returnHtml {
+				r.Response.WriteJsonExit(rData)
+			} else {
+				if renderErr := httpUtil.Render(r.Response.ResponseWriter, getVerifyPage(poly.Rule.VerifyPage), &rData); renderErr != nil {
+					r.SetError(NewErrorWithCode(GATEWAY_HTML_RENDER_ERR, fmt.Sprintf("验证码页面:%v\n", renderErr)))
+				}
 			}
+			return
 		}
-		return
-	}
+	}()
 	r.Middleware.Next()
 }
 

+ 6 - 2
core/proxy/proxyServer.go

@@ -12,6 +12,7 @@ import (
 	"fmt"
 	"github.com/gogf/gf/v2/frame/g"
 	"github.com/gogf/gf/v2/net/ghttp"
+	"github.com/gogf/gf/v2/net/gtrace"
 	"github.com/gogf/gf/v2/os/gcfg"
 	"github.com/gogf/gf/v2/os/gctx"
 	"net/http"
@@ -23,8 +24,9 @@ var routerManager *router.Manager
 const errTryTime = 10 //错误尝试
 
 // InitGateWayServer 初始化网关服务
-func InitGateWayServer() *ghttp.Server {
-	initCtx := gctx.New()
+func InitGateWayServer(initCtx gctx.Ctx) *ghttp.Server {
+	initCtx, span := gtrace.NewSpan(initCtx, "InitGateWayServer")
+	defer span.End()
 	//创建节点,并持续观察节点变化
 	watchNode := node.NewNode(gcfg.Instance().MustGet(initCtx, "system.etcdListen", nil).Strings()...)
 	go watchNode.NewWatcher(initCtx, vars.BManager)
@@ -69,6 +71,8 @@ func InitGateWayServer() *ghttp.Server {
 // proxyHandler 网关代理Handler处理
 // 完成所有前置校验后,请求代理服务逻辑
 var proxyHandler = func(r *ghttp.Request) {
+	_, span := gtrace.NewSpan(r.Context(), "proxyHandler")
+	defer span.End()
 	if r.GetError() != nil {
 		return
 	}

+ 6 - 1
core/proxy/rpc/powerCheckCenter.go

@@ -2,6 +2,7 @@ package rpc
 
 import (
 	"fmt"
+	"github.com/gogf/gf/v2/net/gtrace"
 
 	. "bp.jydev.jianyu360.cn/BaseService/gateway/common/gatecode"
 	"bp.jydev.jianyu360.cn/BaseService/powerCheckCenter/rpc/pb"
@@ -23,7 +24,10 @@ func initPowerCheckCenterRpcRpc() {
 	}))
 }
 
-func CheckUserPower(power_type int, appid, userId string, baseUserId, accountId, entId, positionType, positionId int64) error {
+func CheckUserPower(ctx gctx.Ctx, power_type int, appid, userId string, baseUserId, accountId, entId, positionType, positionId int64) error {
+	ctx, span := gtrace.NewSpan(ctx, "CheckUserPower")
+	defer span.End()
+	fmt.Println("PowerCheckCenterRpc value", PowerCheckCenterRpc)
 	res, err := PowerCheckCenterRpc.Check(gctx.New(), &pb.CheckReq{
 		Appid:        appid,
 		Userid:       userId,
@@ -33,6 +37,7 @@ func CheckUserPower(power_type int, appid, userId string, baseUserId, accountId,
 		PositionType: positionType,
 		PositionId:   positionId,
 	})
+	fmt.Println("CheckUserPower", res, err)
 	if err != nil {
 		return err
 	}

+ 16 - 6
core/proxy/rpc/resourceCenter.go

@@ -2,6 +2,8 @@ package rpc
 
 import (
 	"fmt"
+	"github.com/gogf/gf/v2/frame/g"
+	"github.com/gogf/gf/v2/net/gtrace"
 	"strings"
 
 	. "bp.jydev.jianyu360.cn/BaseService/gateway/common/gatecode"
@@ -32,7 +34,10 @@ func initResourceCenterRpc() {
 // funcCode 业务代码
 // reqFuncCode 	 通用结构&&需要校验权限则先判断此接口是否有此functionCode的方法
 // appid 平台标识
-func CheckResourcePower(accountId, entAccountId, entId, entUserId int64, funcCodeRule, reqFuncCode, Appid string) (UseCount, SurplusCount int64, err error) {
+func CheckResourcePower(ctx gctx.Ctx, accountId, entAccountId, entId, entUserId int64, funcCodeRule, reqFuncCode, Appid string) (UseCount, SurplusCount int64, err error) {
+	ctx, span := gtrace.NewSpan(ctx, "CheckResourcePower")
+	defer span.End()
+
 	funcCode := funcCodeRule
 	funcCodeArr := strings.Split(funcCodeRule, ",")
 	if reqFuncCode != "" || len(funcCodeArr) > 1 {
@@ -50,7 +55,7 @@ func CheckResourcePower(accountId, entAccountId, entId, entUserId int64, funcCod
 		funcCode = reqFuncCode
 	}
 
-	res, err := ResourceCenterRpc.CheckPower(gctx.New(), &pb.CheckPowerReq{
+	res, err := ResourceCenterRpc.CheckPower(ctx, &pb.CheckPowerReq{
 		Appid:        Appid,
 		FunctionCode: funcCode,
 		AccountId:    accountId,
@@ -87,8 +92,10 @@ func CheckResourcePower(accountId, entAccountId, entId, entUserId int64, funcCod
 // funcCode 业务代码
 // deductNum 扣除数量
 // ids 扣除详情id;例如数据导出信息id等数据
-func ResourcePowerDeduct(accountId, entAccountId int64, funcCode, appId string, deductNum int64, ids []string) error {
-	res, err := ResourceCenterRpc.Deduction(gctx.New(), &pb.DeductionReq{
+func ResourcePowerDeduct(ctx g.Ctx, accountId, entAccountId int64, funcCode, appId string, deductNum int64, ids []string) error {
+	ctx, span := gtrace.NewSpan(ctx, "ResourcePowerDeduct")
+	defer span.End()
+	res, err := ResourceCenterRpc.Deduction(ctx, &pb.DeductionReq{
 		Appid:        appId,
 		AccountId:    accountId,
 		EntAccountId: entAccountId,
@@ -119,8 +126,11 @@ func ResourcePowerDeduct(accountId, entAccountId int64, funcCode, appId string,
 // funcCode 业务代码
 // deductNum 扣除数量
 // ids 扣除详情id;例如数据导出信息id等数据
-func ResourcePowerRecharge(accountId, entAccountId int64, funcCode, appId string, deductNum int64, ids []string) error {
-	res, err := ResourceCenterRpc.Recharge(gctx.New(), &pb.RechargeReq{
+func ResourcePowerRecharge(ctx g.Ctx, accountId, entAccountId int64, funcCode, appId string, deductNum int64, ids []string) error {
+	ctx, span := gtrace.NewSpan(ctx, "ResourcePowerRecharge")
+	defer span.End()
+
+	res, err := ResourceCenterRpc.Recharge(ctx, &pb.RechargeReq{
 		Appid:        appId,
 		AccountId:    accountId,
 		EntAccountId: entAccountId,

+ 5 - 1
core/proxy/rpc/userCenter.go

@@ -6,6 +6,7 @@ import (
 	"bp.jydev.jianyu360.cn/BaseService/userCenter/rpc/pb"
 	"bp.jydev.jianyu360.cn/BaseService/userCenter/rpc/usercenter"
 	"fmt"
+	"github.com/gogf/gf/v2/net/gtrace"
 	"github.com/gogf/gf/v2/os/gcfg"
 	"github.com/gogf/gf/v2/os/gctx"
 	"github.com/zeromicro/go-zero/core/discov"
@@ -24,7 +25,10 @@ func initUserCenterRpc() {
 }
 
 // CheckAccountStatus 校验企业认证状态及账户状态
-func CheckAccountStatus(entId int64, userId string, rule *router.Router) error {
+func CheckAccountStatus(ctx gctx.Ctx, entId int64, userId string, rule *router.Router) error {
+	_, span := gtrace.NewSpan(ctx, "CheckAccountStatus")
+	defer span.End()
+
 	if rule.AuthCheck.GetCode() == 0 && rule.AccountCheck.GetCode() == 0 {
 		return nil
 	}

+ 5 - 0
core/router/manager.go

@@ -7,6 +7,7 @@ import (
 	"fmt"
 	"github.com/gogf/gf/v2/frame/g"
 	"github.com/gogf/gf/v2/net/ghttp"
+	"github.com/gogf/gf/v2/net/gtrace"
 	"github.com/gogf/gf/v2/os/gctx"
 	"github.com/gogf/gf/v2/util/gconv"
 	"log"
@@ -98,6 +99,10 @@ func (m *Manager) GetRouterRule(url string) (*Router, error) {
 
 // InfusionContext 注入通用结构体gContext
 func (m *Manager) InfusionContext(r *ghttp.Request) (err error) {
+	_, span := gtrace.NewSpan(r.Context(), "InfusionContext")
+	defer span.End()
+	//r.SetCtx(ctx)
+
 	var router *Router
 	var GCtx = &GContext{
 		Sess:       &JySession{},

+ 9 - 3
etc/config.yaml

@@ -33,7 +33,7 @@ etcd:
     powerCheckCenter:
       key: powercheck.rpc
       address:
-        - 192.168.3.206:2379
+        - 192.168.3.149:2379
 
 #数据库配置
 databases:
@@ -97,6 +97,12 @@ proxy:
   expectContinueTimeout: 1    # 100-continue 超时时间。默认1秒
   maxIdleConnsPerHost: 5      # 客户端可以持有的最大空闲连接。默认5
 
+# jaeger
+jaeger:
+  name: gateway
+  address: 192.168.130.228:6831
+
+
 #日志配置
 logger:
   level: "PROD"                # ALL, DEV, PROD
@@ -156,5 +162,5 @@ outServer:
 
 # 仅限此程序代理的地址
 noPowerUrlSwitch:
-  '/nzj/app/nzj.app/nzj_detail_1.spg' : '/nzj/app/nzj.app/nzj_detail_0.spg'
-  '/nzj/app/nzj.app/nzj_search_1.spg': '/nzj/app/nzj.app/nzj_search_0.spg'
+  '/succbi/nzj/app/nzj.app/nzj_detail_1.spg' : '/succbi/nzj/app/nzj.app/nzj_detail_0.spg'
+  '/succbi/nzj/app/nzj.app/nzj_search_1.spg': '/succbi/nzj/app/nzj.app/nzj_search_0.spg'

+ 1 - 0
go.mod

@@ -9,6 +9,7 @@ require (
 	bp.jydev.jianyu360.cn/BaseService/resourceCenter v0.0.7
 	bp.jydev.jianyu360.cn/BaseService/userCenter v0.0.0-20220905055615-8540037e1b06
 	github.com/go-redis/redis v6.15.9+incompatible
+	github.com/gogf/gf/contrib/trace/jaeger/v2 v2.3.3
 	github.com/gogf/gf/v2 v2.3.1
 	github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0
 	github.com/zeromicro/go-zero v1.4.4

+ 4 - 0
go.sum

@@ -595,6 +595,9 @@ github.com/gobuffalo/packr/v2 v2.0.9/go.mod h1:emmyGweYTm6Kdper+iywB6YK5YzuKchGt
 github.com/gobuffalo/packr/v2 v2.2.0/go.mod h1:CaAwI0GPIAv+5wKLtv8Afwl+Cm78K/I/VCm/3ptBN+0=
 github.com/gobuffalo/syncx v0.0.0-20190224160051-33c29581e754/go.mod h1:HhnNqWY95UYwwW3uSASeV7vtgYkT2t16hJgV3AEPUpw=
 github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA=
+github.com/gogf/gf/contrib/trace/jaeger/v2 v2.3.3 h1:vLkj6PxOvJFaQ/YLLkhA8t9g3b0bqiAv99yf5Jjd0Jk=
+github.com/gogf/gf/contrib/trace/jaeger/v2 v2.3.3/go.mod h1:RMX9eZNqz4sdIyGcXM9W1HXW8D6lATYjAKgFBbdOnLk=
+github.com/gogf/gf/v2 v2.0.0/go.mod h1:apktt6TleWtCIwpz63vBqUnw8MX8gWKoZyxgDpXFtgM=
 github.com/gogf/gf/v2 v2.0.6/go.mod h1:8uYzw7qNzuq8vrhVlWke1b1925FFqOJIgmyYW1sr/0M=
 github.com/gogf/gf/v2 v2.3.1 h1:uptCJK47N6KSRwTBnFAqBWYnYa/OXBkZ0OlhO9CK7bQ=
 github.com/gogf/gf/v2 v2.3.1/go.mod h1:tsbmtwcAl2chcYoq/fP9W2FZf06aw4i89X34nbSHo9Y=
@@ -1043,6 +1046,7 @@ go.opentelemetry.io/otel v1.9.0/go.mod h1:np4EoPGzoPs3O67xUVNoPPcmSvsfOxNlNA4F4A
 go.opentelemetry.io/otel v1.10.0 h1:Y7DTJMR6zs1xkS/upamJYk0SxxN4C9AqRd77jmZnyY4=
 go.opentelemetry.io/otel v1.10.0/go.mod h1:NbvWjCthWHKBEUMpf0/v8ZRZlni86PpGFEMA9pnQSnQ=
 go.opentelemetry.io/otel/exporters/jaeger v1.3.0/go.mod h1:KoYHi1BtkUPncGSRtCe/eh1ijsnePhSkxwzz07vU0Fc=
+go.opentelemetry.io/otel/exporters/jaeger v1.7.0/go.mod h1:PwQAOqBgqbLQRKlj466DuD2qyMjbtcPpfPfj+AqbSBs=
 go.opentelemetry.io/otel/exporters/jaeger v1.8.0/go.mod h1:GbWg+ng88rDtx+id26C34QLqw2erqJeAjsCx9AFeHfE=
 go.opentelemetry.io/otel/exporters/jaeger v1.9.0/go.mod h1:hquezOLVAybNW6vanIxkdLXTXvzlj2Vn3wevSP15RYs=
 go.opentelemetry.io/otel/exporters/jaeger v1.10.0 h1:7W3aVVjEYayu/GOqOVF4mbTvnCuxF1wWu3eRxFGQXvw=

+ 12 - 1
main.go

@@ -6,8 +6,10 @@ import (
 	"bp.jydev.jianyu360.cn/BaseService/gateway/core/proxy"
 	"bp.jydev.jianyu360.cn/BaseService/gateway/core/proxy/middleware"
 	"bp.jydev.jianyu360.cn/BaseService/gateway/core/proxy/rpc"
+	"github.com/gogf/gf/contrib/trace/jaeger/v2"
 	"github.com/gogf/gf/v2/frame/g"
 	"github.com/gogf/gf/v2/os/gcfg"
+	"github.com/gogf/gf/v2/os/gctx"
 )
 
 func init() {
@@ -19,6 +21,15 @@ func init() {
 }
 
 func main() {
+	mainCtx := gctx.New()
+	//初始化链路跟踪
+	if jaegerAddress := g.Cfg().MustGet(mainCtx, "jaeger.address", "").String(); jaegerAddress != "" {
+		tp, err := jaeger.Init(g.Cfg().MustGet(mainCtx, "jaeger.name", "gateway").String(), jaegerAddress)
+		if err != nil {
+			g.Log().Fatal(mainCtx, err)
+		}
+		defer tp.Shutdown(mainCtx)
+	}
 	//初始化网关服务并启动服务
-	proxy.InitGateWayServer().Run()
+	proxy.InitGateWayServer(mainCtx).Run()
 }