spring 请求的TraceID未在服务之间传输

qv7cva1a  于 2022-11-28  发布在  Spring
关注(0)|答案(1)|浏览(150)

我从一个微服务调用一个微服务,并期望从基本服务启动的traceID(由sleuth给出)应该作为植入zipkin的sleuth传输到被调用的服务。
这是对服务的调用

RestTemplate restTemplate = new RestTemplate();
logger.info("ApplicationController: controllerMessage() called: " + properties.getType() +
                " " + properties2.getMode());
String uri = "http://localhost:8089/poc1/message";
//String uri = "http://google.com";
        
        
HttpHeaders headers = new HttpHeaders();
//headers.add("Authorization", authToken);
HttpEntity request = new HttpEntity(headers);
        
ResponseEntity<String> response = restTemplate.exchange(
                uri,
                HttpMethod.GET,
                request,
                String.class
            );

预期在上述服务的日志中打印的相同traceID也将在被调用服务的日志中打印。在这种情况下,在http://localhost:8089/poc1/message的日志中应打印相同的跟踪ID。但是,这种情况没有发生
使用2.7.5版本的 Spring Boot 2021.0.4版本的Spring云
有什么线索吗?
预期由初始请求生成的相同traceID应打印在被调用服务的日志中。

qvsjd97n

qvsjd97n1#

您正在通过new创建RestTemplate。请将其创建为bean并将其注入到代码中。

@Bean
RestTemplate restTemplate() {
  return new RestTemplate();
}

我们在文档中用一个大大的惊叹号写在这里https://docs.spring.io/spring-cloud-sleuth/docs/current/reference/html/integrations.html#sleuth-http-client-rest-template-integration
我贴一下方便你
您必须将RestTemplate注册为bean,以便插入拦截器。如果您使用新的关键字创建RestTemplate示例,则检测不起作用。

相关问题