Поддерживает ли spring boot (Spring 3) graphql трассировку между микросервисами?

Я использую зависимости ниже микрометра вместе со стартером spring boot graphql.

    <dependency>
        <groupId>io.micrometer</groupId>
        <artifactId>micrometer-observation</artifactId>
    </dependency>
    <dependency>
        <groupId>io.micrometer</groupId>
        <artifactId>micrometer-tracing</artifactId>
    </dependency>
    <dependency>
        <groupId>io.micrometer</groupId>
        <artifactId>micrometer-tracing-bridge-brave</artifactId>
    </dependency>

Когда я использую ниже graphqlclient для извлечения данных из одного из моих микросервисов, я вижу, что traceId распространяется для обоих сервисов, но, к сожалению, по-разному.

    @Bean
public HttpGraphQlClient dataServiceHttpGraphQlClient(@Value("${url}") String dataServiceUrl) {
    return HttpGraphQlClient.builder()
            .url(url)
            .header(HttpHeaders.CONTENT_TYPE, "application/json")
            .header(HttpHeaders.ACCEPT, "application/json")
            .build();
}

Вот как я его выполняю:

 public <T> Mono<List<T>> executeQuery(final String queryName,
                                      final String path,
                                      final Class<T> responseClass,
                                      final Map<String, Object> variables) {
    log.debug("Executing {} query: {}", path, queryName);

    GraphQlClient.RequestSpec document = graphQlClient.documentName(queryName);
    if (!CollectionUtils.isEmpty(variables)) document.variables(variables);

    return document.execute()
            .mapNotNull(response -> response.field(path).toEntityList(responseClass))
            .onErrorResume(error -> Mono.error(new RuntimeException("Error " + error.getMessage()))); //TODO custom exception

}

Когда я проверяю заголовки в запрошенной службе, я вижу, что заголовок трассировки не добавлен.

Любая помощь будет оценена по достоинству.

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

Ответы 1

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

Я понял это. Здесь есть две темы, которые сначала вы должны связать WebClient.Builder с помощью Autowiring, поскольку Spring сам обрабатывает трассировку.

Во-вторых, есть ошибка в spring graphql https://github.com/spring-projects/spring-graphql/issues/675 Поэтому исправлено использование 3.0.7-SNAPSHOT для весенних зависимостей.

@Bean
public HttpGraphQlClient dataServiceHttpGraphQlClient(@Autowired WebClient.Builder webClientBuilder,
                                                      @Value("${url}") String url) {
    return HttpGraphQlClient.builder(webClientBuilder)
            .url(url)
            .build();
}

ОБНОВЛЕНИЕ 3.0.7 уже выпущено, вам больше не нужно использовать SNAPSHOT.

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