为了账号安全,请及时绑定邮箱和手机立即绑定

微服务中提取载体未找到SpanContext

微服务中提取载体未找到SpanContext

Go
杨__羊羊 2023-08-07 10:44:31
我正在尝试实现一个基于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因为它的配置比普通的HTTPHeaderPropagatorZipkinPropagator接收的参数较少,但灵活性也较差。此外,您收到的错误来自该Extract方法,其类型为opentracing.ErrSpanContextNotFoundExtract的方法ZipkinPropagator不太复杂,因为它仅在TraceID发送opentracing.ErrSpanContextNotFound错误之前(当 时carrier.TraceID()==0)检查。

您也可以使用HTTPHeaderPropagator,但它的设置稍微复杂一些,并且方法会检查除发送错误之前Extract之外的更多内容(检查和是从 中提取的)。TraceIDopentracing.ErrSpanContextNotFounddebugIDbaggageHeadersConfig

查看完整回答
反对 回复 2023-08-07
  • 1 回答
  • 0 关注
  • 103 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信