spring boot3、rabbitMQ、Zipkin 中的不同请求

问题描述 投票:0回答:1

我正在使用 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

非常感谢您的帮助,欢迎任何建议。

rabbitmq micrometer zipkin spring-boot-3
1个回答
0
投票

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
© www.soinside.com 2019 - 2024. All rights reserved.