Настройка микрометра для автоматического создания нового диапазона в асинхронном режимеJAVA

Программисты JAVA общаются здесь
Anonymous
Настройка микрометра для автоматического создания нового диапазона в асинхронном режиме

Сообщение Anonymous »

Я пытаюсь заставить Spring Boot 3.2 работать с идентификаторами трассировки/диапазона аналогично тому, как Spring Cloud Sleuth работает в Spring Boot 2.
Я придумал следующий класс конфигурации:

Код: Выделить всё

@Configuration
class MicrometerConfig implements AsyncConfigurer {
public static Executor executor() {
return ContextExecutorService.wrap(ForkJoinPool.commonPool(), contextSnapshotFactory::captureAll);
}

private static final ContextSnapshotFactory contextSnapshotFactory = ContextSnapshotFactory.builder()
.build();

@Override
public Executor getAsyncExecutor() {
return ContextExecutorService.wrap(Executors.newCachedThreadPool(), contextSnapshotFactory::captureAll);
}
}
Это работает для методов @Async, но не создает новые диапазоны для новых потоков. Я попытался добавить аннотацию @NewSpan к моему методу @Async, но из-за этого мой метод больше не работает асинхронно.
Я также пытался вручную добавить новый диапазон в форму моего асинхронного исполнителя

Код: Выделить всё

@Override
public Executor getAsyncExecutor() {
Span span = tracer.nextSpan();
span.start();
try (Tracer.SpanInScope ignored = tracer.withSpan(span)) {
log.info("NEWSPAN");
return ContextExecutorService.wrap(Executors.newCachedThreadPool(), contextSnapshotFactory::captureAll);
}
}
Хотя log.info("NEWSPAN") создает новый диапазон в журнале, фактический метод по-прежнему создает внешний идентификатор диапазона. Что мне не хватает?


Подробнее здесь: https://stackoverflow.com/questions/782 ... n-on-async

Вернуться в «JAVA»