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

基于RabbitMQ绑定器的Spring Cloud Stream链路追踪:如何结束追踪

Complete Distributed Tracing with Spring Cloud Stream, RabbitMQ & Spring Cloud Sleuth

Hey there! Let's get your distributed tracing flow fully up and running with your existing setup. Here's a structured, practical guide based on your current dependencies and tech stack:

1. Fill in Missing Dependencies

First, let's complete your Gradle dependencies to include all required components for Sleuth and Stream-RabbitMQ integration. I've added the missing bits below:

dependencies {
    annotationProcessor "org.springframework.boot:spring-boot-configuration-processor" // For @ConfigurationProperties
    compile 'org.springframework.boot:spring-boot-starter-security'
    compile 'org.springframework.boot:spring-boot-starter-actuator'
    compile 'org.springframework.cloud:spring-cloud-starter-config'
    // Core Sleuth dependency for distributed tracing
    compile 'org.springframework.cloud:spring-cloud-starter-sleuth'
    // Optional: Add Zipkin starter if you want to visualize traces (super useful for debugging)
    compile 'org.springframework.cloud:spring-cloud-starter-zipkin'
    // Spring Cloud Stream RabbitMQ binder (critical for your setup)
    compile 'org.springframework.cloud:spring-cloud-starter-stream-rabbit'
}

Quick note: Make sure your Spring Cloud and Spring Boot versions are aligned (check the official Spring version compatibility matrix to avoid version conflicts).

2. Configure Tracing & RabbitMQ Binder

Add these settings to your application.yml (or convert to .properties format) to enable trace propagation and customize behavior:

spring:
  sleuth:
    sampler:
      probability: 1.0  # Sample 100% of traces for testing; lower this in production (e.g., 0.1)
    messaging:
      rabbit:
        enabled: true  # Auto-enable Sleuth integration with RabbitMQ messages
  cloud:
    stream:
      rabbit:
        binder:
          tracing:
            enabled: true  # Ensure RabbitMQ binder passes trace headers between producer/consumer
      bindings:
        # Replace with your actual channel names and queue configs
        input-channel:
          destination: demo-queue
          group: demo-consumer-group
        output-channel:
          destination: demo-queue
  # Optional: If using Zipkin to visualize traces
  zipkin:
    base-url: http://localhost:9411/  # Default Zipkin server address
    sender:
      type: rabbit  # Send traces via RabbitMQ (alternatively use "web" for direct HTTP)

management:
  endpoints:
    web:
      exposure:
        include: '*'  # Expose all actuator endpoints for debugging
  endpoint:
    health:
      show-details: always

3. Verify Trace Propagation

Spring Cloud Sleuth automatically injects traceId and spanId into message headers when sending via Stream, and extracts them when consuming. Here's how to confirm it's working:

  • Add Trace IDs to Logs: Update your logging pattern (e.g., in logback-spring.xml) to include trace/span IDs:

    <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg | Trace: %X{traceId} | Span: %X{spanId}%n</pattern>
    

    Now when your producer sends a message and your consumer processes it, you'll see the same traceId in both logs—proof the trace is propagated end-to-end.

  • Check Actuator Endpoints: Visit http://localhost:8080/actuator/trace (or /actuator/metrics for newer Spring Boot versions) to view local trace details directly.

  • Zipkin Dashboard (If Enabled): Start a Zipkin server with docker run -d -p 9411:9411 openzipkin/zipkin, send a test message, then navigate to http://localhost:9411. You'll see a full trace flow including producer, RabbitMQ, and consumer spans.

4. Critical Tips for Smooth Tracing

  • Don't Mess With Trace Headers: Avoid overwriting or removing headers like X-B3-TraceId, X-B3-SpanId, or X-B3-Sampled—Sleuth handles these automatically.
  • Spring Security Adjustments: If you have Spring Security enabled, make sure it allows trace headers to pass through. Add a quick filter to permit X-B3-* headers:
    @Configuration
    public class SecurityConfig extends WebSecurityConfigurerAdapter {
        @Override
        protected void configure(HttpSecurity http) throws Exception {
            http.authorizeRequests().anyRequest().permitAll()
                .and().csrf().disable();
            // Allow trace headers for distributed tracing
            http.addFilterBefore((request, response, chain) -> {
                response.setHeader("Access-Control-Allow-Headers", "X-B3-TraceId, X-B3-SpanId, X-B3-ParentSpanId, X-B3-Sampled");
                chain.doFilter(request, response);
            }, UsernamePasswordAuthenticationFilter.class);
        }
    }
    
  • Test Edge Cases: Send multiple messages, test error scenarios, and confirm trace continuity even when messages are retried by RabbitMQ.

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 12:12:25