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 d'étendue sont contenus dans les en-têtes du courtier de messages, ce qui permet à l'abonné de créer une nouvelle étendue avec l'ID de trace parent.
Les étapes suivantes peuvent être pris pour construire un contexte ou une étendue côté abonné à l'aide de l'ID de trace :
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
}
spanContext, err := constructNewSpanContext(request.TraceID)
if err != nil {
log.Fatal(err)
}
requestContext := context.Background()
requestContext = trace.ContextWithSpanContext(requestContext, spanContext)
requestInLoopSpan, _ := otel.Tracer("requestInLoop").Start(requestContext, "requestInLoopSpan")
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, garantissant ainsi la relation hiérarchique entre les spans.
Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.
Copyright© 2022 湘ICP备2022001581号-3