在一个HTTP调用中收集所有跨度相同的traceid

问题描述

我想在一个HTTP调用中收集所有生成的跨度(相同的traceid)。我有一个自己的HttpFilter,称为MyHttpFilter(比TracingFilter高),并且有一个实现Reporter<zipkin2.Span>的类MyReporter。在我的MyReporter中,我将所有范围添加Threadlocal对象中,因此我可以在我的MyHttpFilter中获得所有范围。

代码如下:

class MyReporter implements Reporter<zipkin2.Span>
{
    ThreadLocal<XXX> threadLocal = ThreadLocal.withInitial(XXX)
    
    @Override
    public void report(Span span) {
        XXX X = threadLocal.get();
        X.add(span)  // add span to threadlocal object
    }
    
    public XXX currentSpans() {
        return threadLocal.get();
    }
}

class MyHttpFilter extends HttpFilter {
        @Override
        protected void doFilter(HttpServletRequest request,HttpServletResponse response,FilterChain chain) throws IOException,servletexception {
            
            // xxxxxx
            chain.doFilter(request,response);
            // get all spans from thread local
            MyReporter.currentSpans();
            // .....
        }
}

如果在此HTTP调用中,我将执行一系列操作,例如使用resttemplate请求数据并使用rabbimqtemplate发送消息,那么我通常可以从ThreadLocal收集所有跨度。 但是,如果我使用Redistemplate,则无法从ThreadLocal收集跨度,似乎redis工具类报告跨度在另一个线程中。

还有其他方法获取所有具有相同traceid的跨度吗?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)