Spring 侦探 |创建全新的 (detached/orphaned) Trace
Spring Sleuth | Create fresh new (detached/orphaned) Trace
我有一个 Spring Boot application making use of Spring Sleuth for tracing inter-service calls. Within that application a 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 调用都与单个跟踪相关联。很可能是因为在调用 ScheduledExecutorService::submit
期间移交了跟踪上下文。
如何在开始下一次迭代之前清除当前跟踪,以便每次 http 调用都会产生新的 detached/orphaned 跟踪?
如果您使用的是 Sleuth 2.0,则可以调用 Tracer
方法来创建新的跟踪。在旧版本的 sleuth 中,我想我要做的是使用 NOT 一个 bean 的执行程序。这样你就会丢失跟踪并且它会在某个时候重新启动(通过休息模板或类似的东西)。
我有一个 Spring Boot application making use of Spring Sleuth for tracing inter-service calls. Within that application a 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 调用都与单个跟踪相关联。很可能是因为在调用 ScheduledExecutorService::submit
期间移交了跟踪上下文。
如何在开始下一次迭代之前清除当前跟踪,以便每次 http 调用都会产生新的 detached/orphaned 跟踪?
如果您使用的是 Sleuth 2.0,则可以调用 Tracer
方法来创建新的跟踪。在旧版本的 sleuth 中,我想我要做的是使用 NOT 一个 bean 的执行程序。这样你就会丢失跟踪并且它会在某个时候重新启动(通过休息模板或类似的东西)。