TracingConfig.java 1.65 KB
package com.infoloop.tianting.config;

import brave.Tracing;
import brave.baggage.BaggagePropagation;
import brave.baggage.BaggagePropagationConfig;
import brave.propagation.B3Propagation;
import brave.propagation.ThreadLocalCurrentTraceContext;
import brave.sampler.Sampler;
import com.infoloop.tianting.constant.ConfigConstants;
import com.infoloop.tianting.tracing.GrpcClientInterceptor;
import io.grpc.ClientInterceptor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import zipkin2.reporter.Reporter;
import zipkin2.reporter.brave.AsyncZipkinSpanHandler;

public final class TracingConfig {

    @Bean
    ClientInterceptor grpcClientInterceptor(@Autowired final Tracing tracing) {
        return new GrpcClientInterceptor(tracing);
    }

    @Bean
    Tracing tracing(@Value(ConfigConstants.APP_NAME) final String serviceName) {
        return Tracing
                .newBuilder()
                .sampler(Sampler.ALWAYS_SAMPLE)
                .localServiceName(serviceName)
                .propagationFactory(BaggagePropagation
                        .newFactoryBuilder(B3Propagation.FACTORY)
                        .add(BaggagePropagationConfig.SingleBaggageField.remote(ConfigConstants.BRAVE_PROPAGATION_DEBUG_FIELD))
                        .build())
                .currentTraceContext(ThreadLocalCurrentTraceContext.create())
//                .addSpanHandler(AsyncZipkinSpanHandler.create(URLConnectionSender.create(url)))
                .addSpanHandler(AsyncZipkinSpanHandler.create(Reporter.CONSOLE))
                .build();
    }
}