Spring cloud 切换到Sleuth 3.0.2后,TracerContext始终为空
我已经将Sleuth升级到3.0.2版,并开始获得NPE。 我知道有一些突破性的变化,有一个迁移指南,但就我的一生而言,我不能说如何解决这个问题Spring cloud 切换到Sleuth 3.0.2后,TracerContext始终为空,spring-cloud,spring-cloud-sleuth,Spring Cloud,Spring Cloud Sleuth,我已经将Sleuth升级到3.0.2版,并开始获得NPE。 我知道有一些突破性的变化,有一个迁移指南,但就我的一生而言,我不能说如何解决这个问题 [INFO] +- org.springframework.cloud:spring-cloud-starter-sleuth:jar:3.0.2:compile [INFO] | +- org.springframework.boot:spring-boot-starter-aop:jar:2.4.5:compile [INFO] | | \-
[INFO] +- org.springframework.cloud:spring-cloud-starter-sleuth:jar:3.0.2:compile
[INFO] | +- org.springframework.boot:spring-boot-starter-aop:jar:2.4.5:compile
[INFO] | | \- org.aspectj:aspectjweaver:jar:1.9.6:compile
[INFO] | +- org.springframework.cloud:spring-cloud-sleuth-autoconfigure:jar:3.0.2:compile
[INFO] | | +- org.springframework.cloud:spring-cloud-sleuth-instrumentation:jar:3.0.2:compile
[INFO] | | | \- org.springframework.cloud:spring-cloud-sleuth-api:jar:3.0.2:compile
[INFO] | | \- org.aspectj:aspectjrt:jar:1.9.6:compile
[INFO] | \- org.springframework.cloud:spring-cloud-sleuth-brave:jar:3.0.2:compile
[INFO] | +- io.zipkin.brave:brave:jar:5.13.2:compile
[INFO] | +- io.zipkin.brave:brave-context-slf4j:jar:5.13.2:compile
[INFO] | +- io.zipkin.brave:brave-instrumentation-messaging:jar:5.13.2:compile
[INFO] | +- io.zipkin.brave:brave-instrumentation-rpc:jar:5.13.2:compile
[INFO] | +- io.zipkin.brave:brave-instrumentation-spring-rabbit:jar:5.13.2:compile
[INFO] | +- io.zipkin.brave:brave-instrumentation-kafka-clients:jar:5.13.2:compile
[INFO] | +- io.zipkin.brave:brave-instrumentation-kafka-streams:jar:5.13.2:compile
[INFO] | +- io.zipkin.brave:brave-instrumentation-httpclient:jar:5.13.2:compile
[INFO] | | \- io.zipkin.brave:brave-instrumentation-http:jar:5.13.2:compile
[INFO] | +- io.zipkin.brave:brave-instrumentation-httpasyncclient:jar:5.13.2:compile
[INFO] | +- io.zipkin.brave:brave-instrumentation-jms:jar:5.13.2:compile
[INFO] | +- io.zipkin.brave:brave-instrumentation-mongodb:jar:5.13.2:compile
[INFO] | +- io.zipkin.aws:brave-propagation-aws:jar:0.21.3:compile
[INFO] | \- io.zipkin.reporter2:zipkin-reporter-metrics-micrometer:jar:2.16.1:compile
[INFO] | \- io.zipkin.reporter2:zipkin-reporter:jar:2.16.1:compile
[INFO] | \- io.zipkin.zipkin2:zipkin:jar:2.23.0:compile
正在注入的场
@Autowired
protected Tracer tracer;
抛出NPE的行:
tracer.currentSpan().context().traceId();
currentSpan()方法,其中ThreadContext为null
@Nullable
public Span currentSpan() {
TraceContext context = this.currentTraceContext.get();
return context == null ? null : new LazySpan(this, context);
}
此外,此行还生成null:String traceId=MDC.get(“X-B3-traceId”)代码>
MDC.getCopyOfContextMap()代码>返回一个空映射
以下是图片完整性的方法代码:
@GetMapping(path = "/user", produces = APPLICATION_JSON_VALUE)
@RequiresPermissions(IAM_USER_GET_PERMISSION)
public Object getMyself() {
UserContext userContext = (UserContext) SecurityUtils.getSubject().getPrincipal();
String traceId = MDC.get("X-B3-TraceId");
System.out.println(traceId);
System.out.println(MDC.getCopyOfContextMap());
OperationContext operationContext = OperationContext.newInstance(userContext, tracer.currentSpan().context().traceId());
UserBO user = identityManager.getMyself(operationContext);
return ResponseEntity.status(HttpStatus.OK).body(new UserEnvelopeDTO(iamDTOMapper.mapScoped(user, user.getActiveOrganizationId())));
}
正如您所看到的,这是一个HTTP线程,无法正确填充MDC
此外,我还配置了这个bean:
@Bean
public CurrentTraceContext.ScopeDecorator legacyMDCKeys() {
return MDCScopeDecorator.newBuilder()
.clear()
.add(CorrelationScopeConfig.SingleCorrelationField.newBuilder(BaggageFields.TRACE_ID)
.name("X-B3-TraceId").build())
.add(CorrelationScopeConfig.SingleCorrelationField.newBuilder(BaggageFields.PARENT_ID)
.name("X-B3-ParentSpanId").build())
.add(CorrelationScopeConfig.SingleCorrelationField.newBuilder(BaggageFields.SPAN_ID)
.name("X-B3-SpanId").build())
.add(CorrelationScopeConfig.SingleCorrelationField.newBuilder(BaggageFields.SAMPLED)
.name("X-Span-Export").build())
.build();
}