Brave Baggage не работает после переключения с spring-cloud-sleuth на микрометрическую трассировку

Я обновляю свой весенний проект до более новых версий, и после обновления я получил следующее сообщение:

Настройка вашего проекта несовместима с нашими требованиями по следующим причинам: Spring Cloud Sleuth несовместим с этим выпуском Spring Cloud. Действие: Рассмотрите возможность применения следующих действий: Мигрируйте с Spring Cloud Sleuth на Micrometer Tracing.

Поэтому я удалил сыщика и добавил зависимости micrometer-tracing и micrometer-tracing-bridge-brave и переключился на следующую конфигурацию:

management:
  tracing:
    enabled: true
    baggage:
      enabled: true
      correlation:
        enabled: true
        fields: USER_ID
      remote-fields: USER_ID

Теперь мой BaggageField не добавляется в мои MDC, как это было раньше. Я сузил его до tracing.currentTraceContext().get(), возвращающего null, когда я вызываю BaggageField.updateValue(), но я не могу понять, почему это так.

@Nullable static TraceContext currentTraceContext() {
    Tracing tracing = Tracing.current();
    return tracing != null ? tracing.currentTraceContext().get() : null;
}

Вот мой код, который создает bean-компонент BaggageField:

import brave.baggage.BaggageField;
import brave.baggage.CorrelationScopeConfig;
import brave.context.slf4j.MDCScopeDecorator;
import brave.propagation.CurrentTraceContext;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class BaggageConfig {

    public static final String USER_ID_KEY = "USER_ID";

    @Bean
    BaggageField userIdField() {
        return BaggageField.create(USER_ID_KEY);
    }
    

    @Bean
    public CurrentTraceContext.ScopeDecorator mdcScopeDecorator(BaggageField userIdField) {
        return MDCScopeDecorator.newBuilder()
                .clear()
                .add(CorrelationScopeConfig.SingleCorrelationField.newBuilder(userIdField).flushOnUpdate().build())
                .build();
    }
}

И когда я пытаюсь обновить значение, которое я автоматически подключаю в BaggageField:

private final BaggageField userIdField;

И обновить:

userIdField.updateValue(requestMetadataContext.getUserId());

Версии:

org.springframework.boot:3.0.6
org.springframework.cloud:spring-cloud-starter-bootstrap:4.0.2
org.springframework.cloud:spring-cloud-starter-consul-all:4.0.2
io.micrometer:micrometer-tracing:1.1.0
io.micrometer:micrometer-tracing-bridge-brave:1.1.0

Редактировать: Небольшое приложение для воспроизведения Пример багажа

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
0
277
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Мне удалось сделать это, автоматически подключив Tracer и вместо этого добавив багаж внутрь Tracer.

@Autowired
private final Tracer tracer;

tracer.createBaggageInScope("USER_ID", "USER_ID_VALUE");

Другие вопросы по теме