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

如何为ASP.NET Web API添加RabbitMQ与MassTransit的OpenTelemetry追踪?

为ASP.NET Web API的MassTransit+RabbitMQ配置OpenTelemetry追踪

你当前的代码只添加了AddSource("MassTransit"),但这不足以让MassTransit的追踪数据进入OpenTelemetry体系,问题出在没有启用MassTransit自身的OpenTelemetry集成,具体修正步骤如下:

1. 安装必备NuGet包

首先确保安装MassTransit的OpenTelemetry集成包:

Install-Package MassTransit.OpenTelemetry

同时要保证OpenTelemetry相关包(如OpenTelemetry.Extensions.Hosting、OpenTelemetry.Exporter.OpenTelemetryProtocol等)版本与MassTransit包版本兼容,避免版本冲突。

2. 配置MassTransit启用OpenTelemetry

在配置MassTransit的代码块中,需要显式调用.UseOpenTelemetry()方法,让MassTransit生成追踪Span:

services.AddMassTransit(x =>
{
    // 注册你的消费者、消息定义等
    x.AddConsumer<YourConsumer>();

    x.UsingRabbitMq((context, cfg) =>
    {
        cfg.Host("rabbitmq://localhost");
        
        // 启用OpenTelemetry追踪
        cfg.UseOpenTelemetry();
        
        // 配置消费者端点
        cfg.ReceiveEndpoint("your-queue", e =>
        {
            e.ConfigureConsumer<YourConsumer>(context);
        });
    });
});

3. 完善OpenTelemetry的Tracing配置

在原有的OpenTelemetry配置中,替换单独的AddSource("MassTransit"),改用MassTransit提供的常量一次性包含所有相关追踪Source,避免遗漏数据:

services.AddOpenTelemetry()
    .ConfigureResource(resource => resource.AddService(appSettings.JaegerSettings.ServiseName))
    .WithTracing(tracing => tracing
        .AddAspNetCoreInstrumentation()
        .AddHttpClientInstrumentation(options => options.FilterHttpRequestMessage = request => appSettings.JaegerSettings.FilterFrom.Contains(request.Headers.From))
        .AddSqlClientInstrumentation(options => options.SetDbStatementForText = true)
        .AddEntityFrameworkCoreInstrumentation(options => options.SetDbStatementForText = true)
        .AddRedisInstrumentation(options => options.SetVerboseDatabaseStatements = true)
        // 使用MassTransit常量包含所有相关追踪Source
        .AddSource(MassTransit.OpenTelemetry.MassTransitActivitySources.All)
        .AddOtlpExporter(option =>
        {
            option.Endpoint = new Uri(appSettings.JaegerSettings.Endpoint);
            option.Protocol = OpenTelemetry.Exporter.OtlpExportProtocol.HttpProtobuf;
        }));

4. 验证追踪效果

启动Web API后,发送或接收RabbitMQ消息,打开Jaeger UI,查看是否出现以下类型的Span:

  • MassTransit.Send:消息发送时生成的Span
  • MassTransit.Receive:消息接收时生成的Span
  • 带有RabbitMQ队列名称、消息类型等标签的Span

如果仍无数据,可检查:

  • Jaeger的OTLP exporter端点是否可正常访问
  • 应用日志中是否有OpenTelemetry或MassTransit相关的错误信息
  • 确认UseOpenTelemetry()已正确添加到RabbitMQ的配置节点中

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 16:43:24