gpt4 book ai didi

java - 从 Kafka 消息中将 TraceId 注入(inject) spring sleuth

转载 作者:太空宇宙 更新时间:2023-11-04 10:05:21 31 4
gpt4 key购买 nike

我正在研究多个微服务架构,其中入口点来自 Kafka。例如,假设我们有三个微服务micro1、micro2和micro3,micro1中的请求来自kafka消息队列,并通过Rest客户端进一步与micro2和micro3通信。

micro1 收到的消息包含 requestId ,我需要将其放在 spring sleuth 中的 TraceId 位置,并且应该在所有微服务中传播。

我已经通过 MDC 尝试过此操作,但在这种情况下,traceId 不会传播到其他微服务。

是否有其他方法可以在 sleuth 中实现自定义 TraceId 而不是自动生成?

谢谢!!

最佳答案

我认为这不是一个好主意。保留生成的跟踪 ID 并创建另一个生成的字段,该字段将作为行李传播。

如果您确实需要更改 ID 的生成方式,那么您必须更改此 bean

https://github.com/spring-cloud/spring-cloud-sleuth/blob/v2.0.2.RELEASE/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/autoconfig/TraceAutoConfiguration.java#L113-L133

@Bean
@ConditionalOnMissingBean
Propagation.Factory sleuthPropagation(SleuthProperties sleuthProperties) {
if (sleuthProperties.getBaggageKeys().isEmpty() && sleuthProperties.getPropagationKeys().isEmpty()) {
return B3Propagation.FACTORY;
}
ExtraFieldPropagation.FactoryBuilder factoryBuilder = ExtraFieldPropagation
.newFactoryBuilder(B3Propagation.FACTORY);
if (!sleuthProperties.getBaggageKeys().isEmpty()) {
factoryBuilder = factoryBuilder
// for HTTP
.addPrefixedFields("baggage-", sleuthProperties.getBaggageKeys())
// for messaging
.addPrefixedFields("baggage_", sleuthProperties.getBaggageKeys());
}
if (!sleuthProperties.getPropagationKeys().isEmpty()) {
for (String key : sleuthProperties.getPropagationKeys()) {
factoryBuilder = factoryBuilder.addField(key);
}
}
return factoryBuilder.build();
}

关于java - 从 Kafka 消息中将 TraceId 注入(inject) spring sleuth,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53007132/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com