spring-projects / spring-boot

Spring Boot
https://spring.io/projects/spring-boot
Apache License 2.0
74.79k stars 40.6k forks source link

same Trace ID is not propagated in spring boot 3 #34821

Closed pulsar-gupta closed 1 year ago

pulsar-gupta commented 1 year ago

I have 2 spring boot 3 apps ; first spring boot app is calling second app, both the apps are generating trace id but it is not same. I am using rest template to call api's.

io.micrometer micrometer-tracing-bridge-otel

2023-03-30 18:05:44,146 INFO 27964 --- [http-nio-8080-exec-1] INFO [model-microservice, c8fbc38554bcbd8254196a78c8f787fa, 53aba1b9c1f23476] com.sascia.modelmicroservice.controller.Controller.one(83) : Send API called

2023-03-30 18:05:44,050 INFO 22544 --- [http-nio-8081-exec-1] INFO [microservice, aa8e748aa9d0ea493ace7f5c3a8571af, 5cff6acc1680a6ab] com.sascia.modelmicroservice.controller.Controller.getTwo(92) : called 2 2023-03-30 18:05:44,160 INFO 22544 --- [http-nio-8081-exec-1] INFO [microservice, aa8e748aa9d0ea493ace7f5c3a8571af, 5cff6acc1680a6ab] com.sascia.modelmicroservice.controller.Controller.getTwo(104) : Reply = 0ne

pulsar-gupta commented 1 year ago
org.springframework.boot spring-boot-starter-parent 3.0.0 17 0.0.5
<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

    <!-- <dependency>
         <groupId>org.projectlombok</groupId>
         <artifactId>lombok</artifactId>
         <optional>true</optional>
     </dependency>-->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-actuator</artifactId>
    </dependency>
    <dependency>
        <groupId>io.micrometer</groupId>
        <artifactId>micrometer-tracing-bridge-otel</artifactId>
    </dependency>
    <dependency>
        <groupId>io.micrometer</groupId>
        <artifactId>micrometer-registry-prometheus</artifactId>
        <scope>runtime</scope>
    </dependency>
    <dependency>
        <groupId>org.springdoc</groupId>
        <artifactId>springdoc-openapi-starter-webmvc-ui</artifactId>
        <version>2.0.0</version>
    </dependency>

    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <optional>true</optional>
    </dependency>
</dependencies>
scottfrederick commented 1 year ago

@pulsar509 Are you using a RestTemplate on the client side that has been created by a Spring Boot auto-configured RestTemplateBuilder, or a custom RestTemplate created in your code? If it is the latter, this StackOverflow answer might help you. If your setup doesn't match that StackOverflow question, please provide a complete minimal sample that reproduces the problem. You can share it with us by pushing it to a separate repository on GitHub or by zipping it and attaching it to this issue.

pulsar-gupta commented 1 year ago

Thanks for your response Scott. currently, I am facing this issue with resttemplate and Feign both. Attached the code which uses rest template.

here is how I have initialized rest @Bean public RestTemplate getRestTemplate() { return new RestTemplate(); }

the stackoverflow solution is not working for me it is showing me compile time error as "Could not autowire. No beans of 'RestTemplateBuilderConfigurer' type found. "

model-microservice.zip

maciejwalkowiak commented 1 year ago

@pulsar509 I checked the project you attached, injecting RestTemplateBuilderConfigurer works as expected.

To have all the customizers applied on the RestTemplate, you should not create instances of RestTemplate with new, but rather use RestTemplateBuilder:

@Bean
public RestTemplate restTemplate(RestTemplateBuilder builder) {
    return builder.build();
}
pulsar-gupta commented 1 year ago

My problem is resolved with the above solution, thanks !

But I am still facing same issue while using Feign Client. Do not know what is going wrong.

scottfrederick commented 1 year ago

Duplicates #33912

opticSquid commented 2 days ago

how to configure rest client with the same configuration to maintain same trace id across applications