一:导入jar包
<brave.version>3.16.0</brave.version> <zipkin-reporter.version>0.6.9</zipkin-reporter.version> <!--zipkin开始--> <dependency> <groupId>io.zipkin.brave</groupId> <artifactId>brave-core-spring</artifactId> <version>${brave.version}</version> </dependency> <dependency> <groupId>io.zipkin.reporter</groupId> <artifactId>zipkin-sender-okhttp3</artifactId> <version>${zipkin-reporter.version}</version> </dependency> <dependency> <groupId>io.zipkin.reporter</groupId> <artifactId>zipkin-sender-libthrift</artifactId> <version>${zipkin-reporter.version}</version> </dependency> <dependency> <groupId>io.zipkin.reporter</groupId> <artifactId>zipkin-sender-kafka08</artifactId> <version>${zipkin-reporter.version}</version> </dependency> <dependency> <groupId>io.zipkin.brave</groupId> <artifactId>brave-spring-web-servlet-interceptor</artifactId> <version>${brave.version}</version> </dependency> <dependency> <groupId>io.zipkin.brave</groupId> <artifactId>brave-spring-resttemplate-interceptors</artifactId> <version>${brave.version}</version> </dependency>
二:配置前端过滤器(如已配置请忽略)
三:写自定义配置类
package com.mzx.controller; /** * @Param: * @return: * @Author: Mr.Meng * @Date: 2018/10/24 */ import com.github.kristofa.brave.Brave; import com.github.kristofa.brave.http.DefaultSpanNameProvider; import com.github.kristofa.brave.http.SpanNameProvider; import com.github.kristofa.brave.spring.BraveClientHttpRequestInterceptor; import com.github.kristofa.brave.spring.ServletHandlerInterceptor; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Import; import org.springframework.http.client.ClientHttpRequestInterceptor; import org.springframework.web.client.RestTemplate; import org.springframework.web.servlet.config.annotation.InterceptorRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; import zipkin.Span; import zipkin.reporter.AsyncReporter; import zipkin.reporter.Reporter; import zipkin.reporter.Sender; import zipkin.reporter.okhttp3.OkHttpSender; import javax.annotation.PostConstruct; import java.util.ArrayList; import java.util.List; /** * This adds tracing configuration to any web mvc controllers or rest template clients. This should * be configured last. */ @Configuration
@EnableWebMvc // import as the interceptors are annotation with javax.inject and not automatically wired @Import({BraveClientHttpRequestInterceptor.class, ServletHandlerInterceptor.class}) public class WebTracingConfiguration extends WebMvcConfigurerAdapter { /** Configuration for how to send spans to Zipkin */ @Bean Sender sender() { return OkHttpSender.create("http://127.0.0.1:9411/api/v1/spans"); //return LibthriftSender.create("127.0.0.1"); // return KafkaSender.create("127.0.0.1:9092"); } /** Configuration for how to buffer spans into messages for Zipkin */ @Bean Reporter<Span> reporter() { // return new LoggingReporter(); // Just log json info!!! // uncomment to actually send to zipkin! return AsyncReporter.builder(sender()).build(); } @Bean Brave brave() { return new Brave.Builder("这里写项目业务名称").reporter(reporter()).build(); } // decide how to name spans. By default they are named the same as the http method. @Bean SpanNameProvider spanNameProvider() { return new DefaultSpanNameProvider(); } @Bean RestTemplate template() { return new RestTemplate(); } @Autowired private ServletHandlerInterceptor serverInterceptor; @Autowired private BraveClientHttpRequestInterceptor clientInterceptor; @Autowired private RestTemplate restTemplate; // adds tracing to the application-defined rest template @PostConstruct public void init() { List<ClientHttpRequestInterceptor> interceptors = new ArrayList<ClientHttpRequestInterceptor>(restTemplate.getInterceptors()); interceptors.add(clientInterceptor); restTemplate.setInterceptors(interceptors); } // adds tracing to the application-defined web controllers @Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(serverInterceptor); } }