我正在尝试实现一个基于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 关注
- 103 浏览
添加回答
举报
0/150
提交
取消