You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Quarkus能否为SmallRye应用自动创建OpenTelemetry的Consumer/Producer Span?

Quarkus OpenTelemetry 对SmallRye响应式消息的自动Span支持

是的,Quarkus的OpenTelemetry扩展无需额外编写代码,就能为SmallRye Reactive Messaging应用自动创建Consumer和Producer类型的Span,覆盖消息的发送、接收全链路追踪。

具体操作步骤

1. 添加必要依赖

在项目的构建文件中引入OpenTelemetry扩展和对应的消息连接器依赖(以Kafka为例):
Maven:

<dependencies>
    <!-- OpenTelemetry核心扩展 -->
    <dependency>
        <groupId>io.quarkus</groupId>
        <artifactId>quarkus-opentelemetry</artifactId>
    </dependency>
    <!-- SmallRye Reactive Messaging Kafka连接器 -->
    <dependency>
        <groupId>io.quarkus</groupId>
        <artifactId>quarkus-smallrye-reactive-messaging-kafka</artifactId>
    </dependency>
</dependencies>

2. 配置OpenTelemetry导出

在application.properties中配置OpenTelemetry追踪数据的导出目标(以Jaeger为例):

# 配置OTLP导出端点
quarkus.opentelemetry.tracer.exporter.otlp.endpoint=http://localhost:4317
quarkus.opentelemetry.tracer.exporter.otlp.protocol=grpc
# 设置采样策略为全量采集
quarkus.opentelemetry.tracer.sampler.type=always_on

3. 编写基础响应式消息组件

无需添加任何追踪相关代码,直接编写标准的Producer和Consumer:
消息生产者:

import jakarta.enterprise.context.ApplicationScoped;
import org.eclipse.microprofile.reactive.messaging.Outgoing;
import io.smallrye.mutiny.Multi;
import java.time.Duration;

@ApplicationScoped
public class MessageProducer {
    @Outgoing("output-messages")
    public Multi<String> generateMessages() {
        return Multi.createFrom().ticks().every(Duration.ofSeconds(1))
                .map(tick -> "Generated message: " + tick);
    }
}

消息消费者:

import jakarta.enterprise.context.ApplicationScoped;
import org.eclipse.microprofile.reactive.messaging.Incoming;

@ApplicationScoped
public class MessageConsumer {
    @Incoming("input-messages")
    public void processMessage(String message) {
        System.out.println("Received message: " + message);
    }
}

4. 配置消息连接器

在application.properties中添加Kafka连接器的配置:

# 生产者配置
mp.messaging.outgoing.output-messages.connector=smallrye-kafka
mp.messaging.outgoing.output-messages.topic=demo-topic
mp.messaging.outgoing.output-messages.value.serializer=org.apache.kafka.common.serialization.StringSerializer

# 消费者配置
mp.messaging.incoming.input-messages.connector=smallrye-kafka
mp.messaging.incoming.input-messages.topic=demo-topic
mp.messaging.incoming.input-messages.value.deserializer=org.apache.kafka.common.serialization.StringDeserializer
mp.messaging.incoming.input-messages.group.id=demo-consumer-group

5. 验证自动追踪

  1. 启动Jaeger(或其他OpenTelemetry兼容的收集器);
  2. 启动Quarkus应用;
  3. 打开Jaeger UI,选择对应的服务,即可看到自动生成的Producer(对应消息发送)和Consumer(对应消息接收)类型Span,完整展示消息链路的追踪数据。

补充说明

  • 除Kafka外,Quarkus OpenTelemetry扩展还支持SmallRye Reactive Messaging的其他主流连接器(如AMQP、MQTT等),配置方式类似;
  • 如果需要为Span添加自定义属性或扩展追踪逻辑,可以通过OpenTelemetry的Java API手动实现,但基础的消息链路追踪无需额外代码。

内容的提问来源于stack exchange,提问作者Youcef

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 22:07:13