我正在尝试实现一个基于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之外的更多内容(检查和是从 中提取的)。TraceIDopentracing.ErrSpanContextNotFounddebugIDbaggageHeadersConfig
- 1 回答
- 0 关注
- 180 浏览
添加回答
举报
0/150
提交
取消
