我正在使用 Spring Boot 3 和 RabbitMQ。事实证明,当我从微服务 A 向微服务 B 发出请求时,Zipkin 显示了针对微服务 A 的单独请求以及针对服务 B 和 RabbitMQ 的不同请求。这两个请求具有不同的 TraceId,但似乎并不相互依赖,尽管它们是同一请求的一部分。你知道我该如何解决这个问题吗?
这是我的 pom.xml 依赖项
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>io.micrometer</groupId>
<artifactId>micrometer-tracing-bridge-brave</artifactId>
</dependency>
<dependency>
<groupId>io.zipkin.reporter2</groupId>
<artifactId>zipkin-reporter-brave</artifactId>
</dependency>
这里是application.yml
rabbitmq:
in:
requests:
queue: q.requests.creation
exchange: sms_requests
out:
books:
queue: q.books.availabilities
exchange: sms_books
routingkey: sms_books_routingkey
logging:
pattern:
level: '%5p [${spring.application.name:},%X{traceId:-},%X{spanId:-}]'
management:
tracing:
sampling:
probability: 1.0
propagation:
type: w3c, b3_multi, b3
exporter:
zipkin:
enabled: true
配置文件也许可以帮助查看问题出在哪里
@Configuration
public class MyConfiguration implements WebMvcConfigurer {
@Bean
ContainerCustomizer<SimpleMessageListenerContainer> containerCustomizer() {
return container -> container.setObservationEnabled(true);
}
}
最后是存储库的 url 以及 Zipkin 如何将这两个请求显示为不同的请求的图像。如果你想看更详细的东西
https://github.com/ksreyr/unir-shop
非常感谢您的帮助,欢迎任何建议。
将
brave-instrumentation-spring-rabbit
添加到 pom.xml
<dependency>
<groupId>io.zipkin.brave</groupId>
<artifactId>brave-instrumentation-spring-rabbit</artifactId>
</dependency>
将此添加到您的configuration.java
@Bean
public SpringRabbitTracing springRabbitTracing(Tracing tracing) {
return SpringRabbitTracing
.newBuilder(tracing)
.build();
}
@Bean
public RabbitTemplate rabbitTemplate(ConnectionFactory connectionFactory, SpringRabbitTracing tracing) {
RabbitTemplate rabbitTemplate = tracing.newRabbitTemplate(connectionFactory);
return rabbitTemplate;
}
@Bean
public ContainerCustomizer<SimpleMessageListenerContainer> containerCustomizer() {
// This config is for listener to get tracing id from header
return container -> container.setObservationEnabled(true);
}
通过使用
SpringRabbitTracing.newRabbitTemplate
它将在 TracingMessagePostProcessor
的
BeforePublishPostProcessors
上添加一个
rabbitTemplate
添加配置后,您将在消息标题中找到密钥
traceparent
。
traceparent: 00-66223f78c4d535f89cf9294bddfa1776-bc93c50cb791cc4a-00