我有一个Spring Boot应用程序使用Spring Sleuth来跟踪服务间调用。在该应用程序中,存在ScheduledExecutorService,它在循环中执行http请求(下面的伪代码):
class HttpCaller implements Runnable {
public void run() {
performHttpCall();
// "loop"
executor.submit(this::run);
}
}
// start it once
scheduler.submit(new HttpCaller());
如果我现在看一下Sleuth产生的跟踪并存储在Zipkin中,我可以看到所有的http调用都与一个Trace相关联。很可能是因为跟踪上下文在调用ScheduledExecutorService::submit
期间被移交。
如何在开始下一次迭代之前清除当前跟踪,以便每次http调用都会产生新的分离/孤立跟踪?
答案 0 :(得分:1)
如果您正在使用Sleuth 2.0,则可以使用Tracer
方法调用以创建新跟踪。在老版本的侦探中,我想我要做的是使用 NOT bean的执行程序。那样你就会失去踪迹,它会在某个时刻重新启动(通过休息模板或类似的那样)。