Весенний сыщик | Создать новую (отдельную / осиротевшую) трассировку

У меня есть приложение 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-вызовы связаны к единственной трассировке. Скорее всего, потому что контекст трассировки передается во время вызова ScheduledExecutorService::submit.

Как очистить текущую трассировку перед началом следующей итерации, чтобы каждый HTTP-вызов приводил к новой отсоединенной / потерянной трассе?


person Marc-Christian Schulze    schedule 06.04.2018    source источник


Ответы (1)


Если вы используете Sleuth 2.0, вы можете вызвать Tracer метод для создания новой трассировки. Я думаю, что в более старой версии Sleuth я бы использовал программу-исполнитель, которая НЕ является bean-компонентом. Таким образом, вы потеряете след, и он будет перезапущен в какой-то момент (по шаблону отдыха или что-то в этом роде).

person Marcin Grzejszczak    schedule 06.04.2018
comment
как я могу начать новую трассировку с помощью Tracer? Мне не удалось найти такой метод. Вы можете намекнуть? - person rloeffel; 28.04.2021