我正在嘗試實現一個基于Go的微服務系統。我有兩個服務,我嘗試Inject跨越Extract數據。在我的第一次服務中,我有:func (apitracer apiTracer) validatemail(res http.ResponseWriter, req *http.Request) { validateEmailSpan := apitracer.tracer.StartSpan("Validate Email") apitracer.tracer.Inject( validateEmailSpan.Context(), opentracing.HTTPHeaders, opentracing.HTTPHeadersCarrier(req.Header)) req.Header.Set("Content-Type", "application/x-www-form-urlencoded") resp, err := httpClient.Do(req)服務二:wireContext, err := opentracing.GlobalTracer().Extract( opentracing.HTTPHeaders, opentracing.HTTPHeadersCarrier(req.Header))我收到以下錯誤:在提取載體中找不到 SpanContext如果我 dump ,我會得到與 Service-One 相同的log.Println("Form values : ", req.Header.Get("Uber-Trace-Id"))正確值。Uber-Trace-Id請求標頭設置application/x-www-form-urlencoded 為此處建議的
1 回答

米琪卡哇伊
TA貢獻1998條經驗 獲得超6個贊
查看您的代碼,我發現您在創建跟蹤器時錯過了添加Injector
和選項。Extractor
它應該看起來像這樣:
zipkinPropagator?:=?zipkin.NewZipkinB3HTTPHeaderPropagator() tracer,?_,?err?:=?cfg.New( ????????e.ServiceName,?config.Logger(jaeger.StdLogger),?config.ZipkinSharedRPCSpan(true), ????????config.Injector(opentracing.HTTPHeaders,?zipkinPropagator), ????????config.Extractor(opentracing.HTTPHeaders,?zipkinPropagator)) opentracing.SetGlobalTracer(tracer)
ZipkinPropagator
來自github.com/uber/jaeger-client-go/zipkin
包。
您應該嘗試一下,ZipkinPropagator
因為它的配置比普通的HTTPHeaderPropagator
.?ZipkinPropagator
接收的參數較少,但靈活性也較差。此外,您收到的錯誤來自該Extract
方法,其類型為opentracing.ErrSpanContextNotFound
。Extract
的方法ZipkinPropagator
不太復雜,因為它僅在TraceID
發送opentracing.ErrSpanContextNotFound
錯誤之前(當 時carrier.TraceID()==0
)檢查。
您也可以使用HTTPHeaderPropagator
,但它的設置稍微復雜一些,并且方法會檢查除發送錯誤之前Extract
之外的更多內容(檢查和是從 中提取的)。TraceID
opentracing.ErrSpanContextNotFound
debugID
baggage
HeadersConfig
- 1 回答
- 0 關注
- 130 瀏覽
添加回答
舉報
0/150
提交
取消