Construction de spans à partir d'ID de trace dans des contextes non HTTP
Lors de la propagation de traces à l'aide d'en-têtes dans des contextes non HTTP, vous devez construire manuellement spans à l’aide des ID de trace et de span fournis. Voici comment y parvenir :
Côté abonné :
À l'intérieur d'une fonction qui gère les messages entrants avec des en-têtes trace et span :
Exemple :
<code class="go">func handleIncomingMessage(request NewRequest) { traceID, err := trace.TraceIDFromHex(request.TraceID) if err != nil { fmt.Println("error: ", err) return } spanID, err := trace.SpanIDFromHex(request.SpanID) if err != nil { fmt.Println("error: ", err) return } spanContext := trace.NewSpanContext(trace.SpanContextConfig{ TraceID: traceID, SpanID: spanID, TraceFlags: 01, Remote: false, }) ctx := context.Background() ctx = trace.ContextWithSpanContext(ctx, spanContext) _, span := otel.Tracer("requestInLoop").Start(ctx, "requestInLoopSpan") span.AddEvent("processing....") }</code>
Dans cet exemple, NewRequest est un type personnalisé qui contient les identifiants de trace et de span. La fonction handleIncomingMessage prend une structure NewRequest en entrée et crée une étendue avec les ID de trace et d'étendue fournis.
Remarque : Assurez-vous que de nouvelles étendues ne sont pas créées si le champ IsRemote de l'étendue fournie Le contexte est défini sur true, car cela indique que le span a déjà été exporté à distance.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!