package middleware import ( "modelRT/util" "github.com/gin-gonic/gin" ) // StartTrace define func of set trace info from request header func StartTrace() gin.HandlerFunc { return func(c *gin.Context) { traceID := c.Request.Header.Get("traceid") pSpanID := c.Request.Header.Get("spanid") spanID := util.GenerateSpanID(c.Request.RemoteAddr) if traceID == "" { // 如果traceId 为空,证明是链路的发端,把它设置成此次的spanId,发端的spanId是root spanId traceID = spanID // trace 标识整个请求的链路, span则标识链路中的不同服务 } c.Set("traceid", traceID) c.Set("spanid", spanID) c.Set("pspanid", pSpanID) c.Next() } }