Я использую зависимости ниже микрометра вместе со стартером 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
}
Когда я проверяю заголовки в запрошенной службе, я вижу, что заголовок трассировки не добавлен.
Любая помощь будет оценена по достоинству.
Я понял это. Здесь есть две темы, которые сначала вы должны связать 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.