Code Monkey home page Code Monkey logo

Comments (5)

guzhangyu avatar guzhangyu commented on August 25, 2024 1

对于需要自己生成TraceId和SpaceId的实践:
1、起始处增加如下代码:

SofaTraceContext sofaTraceContext=SofaTraceContextHolder.getSofaTraceContext();
        SofaTracerSpan span = sofaTraceContext.getCurrentSpan();
        if(span==null){//防止覆盖
            span= (SofaTracerSpan) SpringMvcTracer.getSpringMvcTracerSingleton().getSofaTracer().buildSpan("testInjectSpan")
                    .withTag(Tags.SPAN_KIND.getKey(), Tags.SPAN_KIND_CLIENT).start();
            sofaTraceContext.push(span);
        }

2、结束处:

 span.finish();
 sofaTraceContext.pop();

from sofa-tracer.

khotyn avatar khotyn commented on August 25, 2024 1

异步处理还有一种更加简单的方式,用我们提供的工具类包装一下 Runnable 或者 Callable 就可以了。https://github.com/alipay/sofa-tracer/wiki/Async#%E5%BC%82%E6%AD%A5%E7%BA%BF%E7%A8%8B%E5%A4%84%E7%90%86

from sofa-tracer.

guanchao-yang avatar guanchao-yang commented on August 25, 2024

如果不是http产生的请求,而是自己产生的线程,有生成相应的TraceId 和 SpaceId的方法吗?

这个问题就相当于你是作为请求的第一个发起方,可以直接通过 OpenTracing 的方式构建一个 Span,可以类似这样去构建:

//开始,当然  this.sofaTracer 是需要继承构建好的实例,简单的可以看下 `com.alipay.sofa.tracer.plugins.springmvc.SpringMvcTracer` 构建方法
SofaTracerSpan span = (SofaTracerSpan) this.sofaTracer.buildSpan("testInjectSpan")
            .withTag(Tags.SPAN_KIND.getKey(), Tags.SPAN_KIND_CLIENT).start();
//结束
span.finish();

我这边手动往MDC里塞值,在rpc调用的时候会被冲掉;有什么不被冲掉的方法吗?

如果 MDC 对应打印的字段是这个文档描述的方式,那么在同一个线程中发生 RPC 调用时,在结束前都会是 RPC 根据你的当前 Span 构造的 Child Span,那么复写就是正常的。如果在 RPC 调用结束后或者开始 RPC 调用前自己向 MDC 中塞值是可以生效的。如果是作为服务引用方,那么可以在被引用的服务发生调用时,在方法前后进行复写 MDC ,但是我们一般不建议大家去覆盖默认的值,如果变为比较随意的值是不易于链路的“串联”的。

from sofa-tracer.

billowqiu avatar billowqiu commented on August 25, 2024

在切换线程的时候,通过拷贝threadlocal到新线程进行上下文传递,应该可以保证在新线程里面发起client调用调用时仍然可以获取到正确的trace信息。

from sofa-tracer.

billowqiu avatar billowqiu commented on August 25, 2024

ttl,思路是一样的

from sofa-tracer.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.