英文:
Brave Baggage not working after switching from spring-cloud-sleuth to micrometer-tracing
问题
I am updating my spring project to newer versions, and after updating I got the following message:
> Your project setup is incompatible with our requirements due to following reasons: Spring Cloud Sleuth is not compatible with this Spring Cloud release train, Action: Consider applying the following actions: Migrate from Spring Cloud Sleuth to Micrometer Tracing.
So I removed sleuth and added the micrometer-tracing and micrometer-tracing-bridge-brave dependencies and switched to the following configuration:
management:
tracing:
enabled: true
baggage:
enabled: true
correlation:
enabled: true
fields: USER_ID
remote-fields: USER_ID
Now my BaggageField
is not getting added to my MDCs as it was before. I have narrowed it down to the tracing.currentTraceContext().get()
returning null when I call BaggageField.updateValue()
but I cannot figure out why this is.
@Nullable static TraceContext currentTraceContext() {
Tracing tracing = Tracing.current();
return tracing != null ? tracing.currentTraceContext().get() : null;
}
Here is my code that creates the BaggageField bean:
import brave.baggage.BaggageField;
import brave.baggage.CorrelationScopeConfig;
import brave.context.slf4j.MDCScopeDecorator;
import brave.propagation.CurrentTraceContext;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class BaggageConfig {
public static final String USER_ID_KEY = "USER_ID";
@Bean
BaggageField userIdField() {
return BaggageField.create(USER_ID_KEY);
}
@Bean
public CurrentTraceContext.ScopeDecorator mdcScopeDecorator(BaggageField userIdField) {
return MDCScopeDecorator.newBuilder()
.clear()
.add(CorrelationScopeConfig.SingleCorrelationField.newBuilder(userIdField).flushOnUpdate().build())
.build();
}
}
And when I try to update the value I autowire in the BaggageField:
```java
private final BaggageField userIdField;
And update:
```java
userIdField.updateValue(requestMetadataContext.getUserId());
Versions:
org.springframework.boot:3.0.6
org.springframework.cloud:spring-cloud-starter-bootstrap:4.0.2
org.springframework.cloud:spring-cloud-starter-consul-all:4.0.2
io.micrometer:micrometer-tracing:1.1.0
io.micrometer:micrometer-tracing-bridge-brave:1.1.0
Edit:
Small application to reproduce Baggage Example
英文:
I am updating my spring project to newer versions, and after updating I got the following message:
> Your project setup is incompatible with our requirements due to following reasons: Spring Cloud Sleuth is not compatible with this Spring Cloud release train, Action: Consider applying the following actions: Migrate from Spring Cloud Sleuth to Micrometer Tracing.
So I removed sleuth and added the micrometer-tracing and micrometer-tracing-bridge-brave dependencies and switched to the following configuration:
management:
tracing:
enabled: true
baggage:
enabled: true
correlation:
enabled: true
fields: USER_ID
remote-fields: USER_ID
Now my BaggageField
is not getting added to my MDCs as it was before. I have narrowed it down to the tracing.currentTraceContext().get()
returning null when I call BaggageField.updateValue()
but I cannot figure out why this is.
@Nullable static TraceContext currentTraceContext() {
Tracing tracing = Tracing.current();
return tracing != null ? tracing.currentTraceContext().get() : null;
}
Here is my code that creates the BaggageField bean:
import brave.baggage.BaggageField;
import brave.baggage.CorrelationScopeConfig;
import brave.context.slf4j.MDCScopeDecorator;
import brave.propagation.CurrentTraceContext;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class BaggageConfig {
public static final String USER_ID_KEY = "USER_ID";
@Bean
BaggageField userIdField() {
return BaggageField.create(USER_ID_KEY);
}
@Bean
public CurrentTraceContext.ScopeDecorator mdcScopeDecorator(BaggageField userIdField) {
return MDCScopeDecorator.newBuilder()
.clear()
.add(CorrelationScopeConfig.SingleCorrelationField.newBuilder(userIdField).flushOnUpdate().build())
.build();
}
}
And when I try to update the value I autowire in the BaggageField:
private final BaggageField userIdField;
And update:
userIdField.updateValue(requestMetadataContext.getUserId());
Versions:
org.springframework.boot:3.0.6
org.springframework.cloud:spring-cloud-starter-bootstrap:4.0.2
org.springframework.cloud:spring-cloud-starter-consul-all:4.0.2
io.micrometer:micrometer-tracing:1.1.0
io.micrometer:micrometer-tracing-bridge-brave:1.1.0
Edit:
Small application to reproduce Baggage Example
答案1
得分: 1
I managed to make this work by autowiring a Tracer
and instead adding the baggage inside the Tracer
.
@Autowired
private final Tracer tracer;
tracer.createBaggageInScope("USER_ID", "USER_ID_VALUE");
英文:
I managed to make this work by autowiring a Tracer
and instead adding the baggage inside the Tracer
.
@Autowired
private final Tracer tracer;
tracer.createBaggageInScope("USER_ID", "USER_ID_VALUE");
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论