Pour établir la relation parent-enfant entre les spans, les en-têtes doivent être utilisés dans des situations où la propagation du contexte n'est pas viable. Dans ce scénario, un ID de trace et un ID de span sont contenus dans les en-têtes du courtier de messages, ce qui permet à l'abonné de créer un nouveau span avec l'ID de trace parent.
Les étapes suivantes peuvent être pris pour construire un contexte ou un span côté abonné à l'aide de l'ID de trace :
<code class="go">func constructNewSpanContext(traceID string) (spanContext trace.SpanContext, err error) { traceID, err := trace.TraceIDFromHex(traceID) if err != nil { return trace.SpanContext{}, err } return trace.NewSpanContext(trace.SpanContextConfig{ TraceID: traceID, }), nil }</code>
<code class="go">spanContext, err := constructNewSpanContext(request.TraceID) if err != nil { log.Fatal(err) }</code>
<code class="go">requestContext := context.Background() requestContext = trace.ContextWithSpanContext(requestContext, spanContext)</code>
<code class="go">requestInLoopSpan, _ := otel.Tracer("requestInLoop").Start(requestContext, "requestInLoopSpan")</code>
En suivant ces étapes, vous pouvez réussir à construire un nouveau span côté abonné en utilisant l'ID de trace extrait des en-têtes de message , assurant la relation hiérarchique entre les travées.
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!