Lorsqu'il s'agit de systèmes distribués, il est crucial de maintenir le contexte et de tracer les relations entre les composants. Dans ce cas, où l'éditeur utilise des en-têtes de message pour propager les informations de trace, nous pouvons toujours construire des étendues OpenTelemetry du côté de l'abonné en utilisant la chaîne traceID reçue.
À Pour créer un span avec ses parents correctement liés, nous devons convertir les chaînes traceID et spanID extraites des en-têtes de requête en objets trace.TraceID et trace.SpanID. Nous y parvenons en utilisant les fonctions suivantes :
<code class="go">var traceID trace.TraceID traceID, err = trace.TraceIDFromHex(request.TraceID) var spanID trace.SpanID spanID, err = trace.SpanIDFromHex(request.SpanID)</code>
Avec les objets traceID et spanID, nous pouvons construire un SpanContext. Nous devons définir l'indicateur Remote sur false, indiquant que cette étendue n'est pas exportée vers un système distant :
<code class="go">var spanContextConfig trace.SpanContextConfig spanContextConfig.TraceID = traceID spanContextConfig.SpanID = spanID spanContextConfig.TraceFlags = 01 spanContextConfig.Remote = false spanContext = trace.NewSpanContext(spanContextConfig)</code>
Pour créer une nouvelle étendue avec ce SpanContext construit, nous devons d'abord en enrichir un nouveau contexte :
<code class="go">requestContext := context.Background() requestContext = trace.ContextWithSpanContext(requestContext, spanContext)</code>
Ensuite, nous pouvons commencer un nouveau span enfant en utilisant le contexte enrichi :
<code class="go">var requestInLoopSpan trace.Span childContext, requestInLoopSpan := otel.Tracer("inboundmessage").Start(requestContext, "requestInLoopSpan")</code>
Cet enfant span sera lié au span parent côté éditeur, permettant une propagation appropriée du contexte dans tout le système distribué.
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!