分散システムを扱う場合、コンテキストを維持し、コンポーネント間の関係を追跡することが重要です。この場合、パブリッシャーがメッセージ ヘッダーを使用してトレース情報を伝播するため、サブスクライバー側で、受信した TraceID 文字列を使用して OpenTelemetry スパンを構築できます。
To親が正しくリンクされたスパンを作成するには、リクエスト ヘッダーから抽出されたtraceIDおよびspanID文字列をtrace.TraceIDおよびtrace.SpanIDオブジェクトに変換する必要があります。これは、次の関数を使用して実現します。
<code class="go">var traceID trace.TraceID traceID, err = trace.TraceIDFromHex(request.TraceID) var spanID trace.SpanID spanID, err = trace.SpanIDFromHex(request.SpanID)</code>
traceID オブジェクトと scanID オブジェクトを使用して、SpanContext を構築できます。 Remote フラグを false に設定して、このスパンがリモート システムにエクスポートされていないことを示す必要があります。
<code class="go">var spanContextConfig trace.SpanContextConfig spanContextConfig.TraceID = traceID spanContextConfig.SpanID = spanID spanContextConfig.TraceFlags = 01 spanContextConfig.Remote = false spanContext = trace.NewSpanContext(spanContextConfig)</code>
新しいスパンを作成するにはこの構築された SpanContext を使用して、最初に新しいコンテキストを強化する必要があります:
<code class="go">requestContext := context.Background() requestContext = trace.ContextWithSpanContext(requestContext, spanContext)</code>
次に、強化されたコンテキストを使用して新しい子スパンを開始できます:
<code class="go">var requestInLoopSpan trace.Span childContext, requestInLoopSpan := otel.Tracer("inboundmessage").Start(requestContext, "requestInLoopSpan")</code>
This childスパンはパブリッシャー側の親スパンにリンクされ、分散システム全体に適切なコンテキストの伝播が可能になります。
以上が分散システムで文字列 TraceID から OpenTelemetry スパンを作成する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。