diff --git a/server/resource/internal/middleware/tracingmiddleware.go b/server/resource/internal/middleware/tracingmiddleware.go new file mode 100644 index 00000000..c8b4efe1 --- /dev/null +++ b/server/resource/internal/middleware/tracingmiddleware.go @@ -0,0 +1,36 @@ +package middleware + +import ( + "net/http" + + "go.opentelemetry.io/otel/trace" +) + +type TracingMiddleware struct { +} + +func NewTracingMiddleware() *TracingMiddleware { + return &TracingMiddleware{} +} + +func (m *TracingMiddleware) Handle(next http.HandlerFunc) http.HandlerFunc { + return func(w http.ResponseWriter, r *http.Request) { + traceId := r.Header.Get("X-Trace-Id") + spanId := r.Header.Get("X-Span-Id") + if traceId != "" && spanId != "" { + TraceID, _ := trace.TraceIDFromHex(traceId) + SpanID, _ := trace.SpanIDFromHex(spanId) + ctx := r.Context() + sc := trace.NewSpanContext(trace.SpanContextConfig{ + TraceID: TraceID, + SpanID: SpanID, + Remote: true, + }) + ctx = trace.ContextWithRemoteSpanContext(ctx, sc) + //next.ServeHTTP(w, r.WithContext(ctx)) + } + + // 处理请求 + next(w, r) + } +} diff --git a/server/resource/internal/svc/servicecontext.go b/server/resource/internal/svc/servicecontext.go index f5392b35..75846bd7 100644 --- a/server/resource/internal/svc/servicecontext.go +++ b/server/resource/internal/svc/servicecontext.go @@ -4,6 +4,7 @@ import ( "errors" "fmt" "fusenapi/server/resource/internal/config" + "fusenapi/server/resource/internal/middleware" "fusenapi/shared" "net/http" @@ -14,6 +15,7 @@ import ( "github.com/aws/aws-sdk-go/aws/credentials" "github.com/aws/aws-sdk-go/aws/session" "github.com/golang-jwt/jwt" + "github.com/zeromicro/go-zero/rest" "gorm.io/gorm" ) @@ -26,6 +28,7 @@ type ServiceContext struct { RabbitMq *initalize.RabbitMqHandle AwsSession *session.Session Repositories *initalize.Repositories + Tracing rest.Middleware } func NewServiceContext(c config.Config) *ServiceContext { @@ -43,6 +46,7 @@ func NewServiceContext(c config.Config) *ServiceContext { BLMServiceUrl: &c.BLMService.Url, AwsSession: session.Must(session.NewSession(&config)), }), + Tracing: middleware.NewTracingMiddleware().Handle, } } diff --git a/server_api/resource.api b/server_api/resource.api index da716189..a62b2bca 100644 --- a/server_api/resource.api +++ b/server_api/resource.api @@ -9,6 +9,10 @@ info ( import "basic.api" +// @server( +// middleware: Tracing // 路由中间件声明 +// ) + service resource { @handler LogoCombineHandler post /api/resource/logo-combine(LogoCombineReq) returns (response); diff --git a/utils/basic/request_parse.go b/utils/basic/request_parse.go index e500e8ad..42151525 100644 --- a/utils/basic/request_parse.go +++ b/utils/basic/request_parse.go @@ -95,7 +95,7 @@ func RequestParse(w http.ResponseWriter, r *http.Request, svcCtx any, LogicReque // return nil, err // } - // if claims != nil { + // if claims != nil {Parse // // 从token中获取对应的用户信息 // userinfo, err = auth.GetUserInfoFormMapClaims(claims) // // 如果获取用户信息出错,则返回未授权的JSON响应并记录错误消息