概览
springboot 2.6.7
reactor-kakfa 1.3.11
spring-cloud-starter-sleuth 3.1.2
解决
不止为何日志没有traceId
按照sleuth的文档,说这么写就行,实际没生效,不知道是否版本问题
java
@Bean("kafkaReceiver")
public KafkaReceiver<String, String> kafkaReceiver(TracingKafkaConsumerFactory tracingKafkaConsumerFactory) {
return KafkaReceiver.create(tracingKafkaConsumerFactory, options);
}
最后在处理消息处,单独添加以下代码
java
@PostConstruct
public void handleMessage() {
kafkaReceiver.receive()
.flatMap(receiverRecord -> {
Span.Builder builder = propagator.extract(receiverRecord, extractor);
Span childSpan = builder.name("on-message").start();
SpanAndScope spanAndScope = new SpanAndScope(childSpan, tracer.withSpan(childSpan));
return dohanle(receiverRecord)
.flatMap(valueResult -> {
receiverRecord.receiverOffset().acknowledge();
return Mono.just(receiverRecord);
})
.doFinally(signalType -> {
spanAndScope.close();
});
})
.subscribe();
}
结果
traceId有了,kafka共用一个
spanId为每条消息单独,并且会向下传播