Quarkus中@Traced注解在OpenTelemetry替代OpenTracing后是否生效的问询
直接结论:原OpenTracing的@Traced注解在纯Quarkus OpenTelemetry环境下无法正常工作,你遇到的无追踪数据问题确实是由OpenTelemetry替代OpenTracing导致的,而非单纯配置缺失。
原因说明
OpenTelemetry与OpenTracing是两套独立的分布式追踪标准,Quarkus的OpenTelemetry扩展仅原生支持自身生态的注解,不会识别处理OpenTracing专属的@Traced注解。当你移除OpenTracing相关扩展、切换到OpenTelemetry后,负责解析@Traced的逻辑也随之被移除,自然无法生成对应的追踪数据。
解决办法
1. 迁移到OpenTelemetry原生注解(推荐长期方案)
将代码中的@Traced替换为OpenTelemetry的@WithSpan注解,示例如下:
import io.opentelemetry.instrumentation.annotations.WithSpan; public class YourService { @WithSpan public void yourMethod() { // 业务逻辑 } }
确保项目中已引入quarkus-opentelemetry依赖,该注解会被Quarkus OpenTelemetry扩展自动识别,生成对应的追踪Span。
2. 启用OpenTracing兼容层(过渡方案)
如果暂时不想大规模修改代码,可以添加Quarkus提供的OpenTelemetry-OpenTracing兼容扩展,让旧的@Traced注解继续生效:
- 在pom.xml(Maven)中添加依赖:
<dependency> <groupId>io.quarkus</groupId> <artifactId>quarkus-opentelemetry-opentracing</artifactId> </dependency>
这个扩展会让OpenTracing的API(包括@Traced)底层使用OpenTelemetry的实现,从而保留原有注解的追踪能力,但这只是过渡方案,建议后续逐步迁移到原生注解。
额外验证
虽然核心问题是注解兼容性,但可以快速确认OpenTelemetry基础配置是否正常:
- 检查
application.properties中是否配置了追踪 exporter(例如OTLP):
quarkus.opentelemetry.tracer.exporter.otlp.endpoint=http://your-otlp-collector:4317 quarkus.opentelemetry.tracer.exporter.otlp.protocol=grpc
如果配置正确且使用@WithSpan仍无数据,再排查其他配置问题,但你的场景大概率是注解不兼容导致。
内容的提问来源于stack exchange,提问作者sg2000

