我正在研究多种微服务架构,其中的切入点来自Kafka。 例如,假设在micro1中我们有3个microservice micro1,micro2和micro3请求来自kafka消息队列,并通过Rest客户端进一步与micro2和micro3通信。
micro1收到的消息包含requestId,我需要在春季侦探中将其替换为TraceId,并且应在所有微服务中传播该消息。
我已经通过MDC进行了尝试,但在这种情况下traceId并未传播到其他微服务。
还有其他方法可以在侦探中实现自定义TraceId而不是自动生成吗?
谢谢!
答案 0 :(得分:0)
我认为这不是一个好主意。保留生成的跟踪ID,并创建另一个生成的字段,该字段将作为行李传播。
如果您确实需要更改ID的生成方式,则必须更改此bean
@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();
}