From 52b4a2df7566c3de3dd2e695cb69968ecc85628a Mon Sep 17 00:00:00 2001 From: YunaiV <> Date: Sat, 21 Mar 2020 17:04:30 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=20zipkin=20=E5=AF=B9=20dubbo?= =?UTF-8?q?=20=E7=9A=84=E9=93=BE=E8=B7=AF=E8=BF=BD=E8=B8=AA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../lab-40-zipkin-dubbo-consumer/pom.xml | 37 ++++++++ .../config/SpringMvcConfiguration.java | 25 ++++++ .../config/ZipkinConfiguration.java | 84 +++++++++++++++++++ .../src/main/resources/application.yaml | 9 +- .../lab-40-zipkin-dubbo-provider/pom.xml | 30 +++++++ .../config/ZipkinConfiguration.java | 57 +++++++++++++ .../src/main/resources/application.yaml | 9 +- .../src/main/resources/application.yaml | 2 +- 8 files changed, 250 insertions(+), 3 deletions(-) create mode 100644 lab-40/lab-40-zipkin-dubbo/lab-40-zipkin-dubbo-consumer/src/main/java/cn/iocoder/springboot/lab40/zpkindemo/consumerdemo/config/SpringMvcConfiguration.java create mode 100644 lab-40/lab-40-zipkin-dubbo/lab-40-zipkin-dubbo-consumer/src/main/java/cn/iocoder/springboot/lab40/zpkindemo/consumerdemo/config/ZipkinConfiguration.java create mode 100644 lab-40/lab-40-zipkin-dubbo/lab-40-zipkin-dubbo-provider/src/main/java/cn/iocoder/springboot/lab40/zipkindemo/providerdemo/config/ZipkinConfiguration.java diff --git a/lab-40/lab-40-zipkin-dubbo/lab-40-zipkin-dubbo-consumer/pom.xml b/lab-40/lab-40-zipkin-dubbo/lab-40-zipkin-dubbo-consumer/pom.xml index 5b086e9b..df663f00 100644 --- a/lab-40/lab-40-zipkin-dubbo/lab-40-zipkin-dubbo-consumer/pom.xml +++ b/lab-40/lab-40-zipkin-dubbo/lab-40-zipkin-dubbo-consumer/pom.xml @@ -50,6 +50,43 @@ 2.13.0 + + + + io.zipkin.brave + brave + + + io.zipkin.reporter2 + zipkin-sender-okhttp3 + + + + + + io.zipkin.brave + brave-instrumentation-spring-webmvc + + + + + io.zipkin.brave + brave-instrumentation-dubbo + 5.10.1 + + + + + + io.zipkin.brave + brave-bom + 5.9.1 + pom + import + + + + diff --git a/lab-40/lab-40-zipkin-dubbo/lab-40-zipkin-dubbo-consumer/src/main/java/cn/iocoder/springboot/lab40/zpkindemo/consumerdemo/config/SpringMvcConfiguration.java b/lab-40/lab-40-zipkin-dubbo/lab-40-zipkin-dubbo-consumer/src/main/java/cn/iocoder/springboot/lab40/zpkindemo/consumerdemo/config/SpringMvcConfiguration.java new file mode 100644 index 00000000..304a394f --- /dev/null +++ b/lab-40/lab-40-zipkin-dubbo/lab-40-zipkin-dubbo-consumer/src/main/java/cn/iocoder/springboot/lab40/zpkindemo/consumerdemo/config/SpringMvcConfiguration.java @@ -0,0 +1,25 @@ +package cn.iocoder.springboot.lab40.zpkindemo.consumerdemo.config; + +import brave.spring.webmvc.SpanCustomizingAsyncHandlerInterceptor; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Import; +import org.springframework.web.servlet.config.annotation.InterceptorRegistry; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; + +@Configuration +@Import(SpanCustomizingAsyncHandlerInterceptor.class) +public class SpringMvcConfiguration implements WebMvcConfigurer { + + @Autowired + public SpanCustomizingAsyncHandlerInterceptor webMvcTracingCustomizer; + + /** + * Decorates server spans with application-defined web tags + */ + @Override + public void addInterceptors(InterceptorRegistry registry) { + registry.addInterceptor(webMvcTracingCustomizer); + } + +} diff --git a/lab-40/lab-40-zipkin-dubbo/lab-40-zipkin-dubbo-consumer/src/main/java/cn/iocoder/springboot/lab40/zpkindemo/consumerdemo/config/ZipkinConfiguration.java b/lab-40/lab-40-zipkin-dubbo/lab-40-zipkin-dubbo-consumer/src/main/java/cn/iocoder/springboot/lab40/zpkindemo/consumerdemo/config/ZipkinConfiguration.java new file mode 100644 index 00000000..29903e32 --- /dev/null +++ b/lab-40/lab-40-zipkin-dubbo/lab-40-zipkin-dubbo-consumer/src/main/java/cn/iocoder/springboot/lab40/zpkindemo/consumerdemo/config/ZipkinConfiguration.java @@ -0,0 +1,84 @@ +package cn.iocoder.springboot.lab40.zpkindemo.consumerdemo.config; + +import brave.CurrentSpanCustomizer; +import brave.SpanCustomizer; +import brave.Tracing; +import brave.http.HttpTracing; +import brave.servlet.TracingFilter; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import zipkin2.Span; +import zipkin2.reporter.AsyncReporter; +import zipkin2.reporter.Sender; +import zipkin2.reporter.okhttp3.OkHttpSender; + +import javax.servlet.Filter; + +@Configuration +public class ZipkinConfiguration { + + // ==================== 通用配置 ==================== + + /** + * Configuration for how to send spans to Zipkin + */ + @Bean + public Sender sender() { + return OkHttpSender.create("http://127.0.0.1:9411/api/v2/spans"); + } + + /** + * Configuration for how to buffer spans into messages for Zipkin + */ + @Bean + public AsyncReporter spanReporter() { + return AsyncReporter.create(sender()); + } + + /** + * Controls aspects of tracing such as the service name that shows up in the UI + */ + @Bean + public Tracing tracing(@Value("${spring.application.name}") String serviceName) { + return Tracing.newBuilder() + .localServiceName(serviceName) +// .currentTraceContext(ThreadLocalCurrentTraceContext.newBuilder() +// .addScopeDecorator(MDCScopeDecorator.create()) // puts trace IDs into logs +// .build() +// ) + .spanReporter(spanReporter()).build(); + } + + /** + * Allows someone to add tags to a span if a trace is in progress + */ + @Bean + public SpanCustomizer spanCustomizer(Tracing tracing) { + return CurrentSpanCustomizer.create(tracing); + } + + // ==================== HTTP 相关 ==================== + + /** + * Decides how to name and tag spans. By default they are named the same as the http method + */ + @Bean + public HttpTracing httpTracing(Tracing tracing) { + return HttpTracing.create(tracing); + } + + /** + * Creates server spans for http requests + */ + @Bean + public Filter tracingFilter(HttpTracing httpTracing) { + return TracingFilter.create(httpTracing); + } + + // ==================== SpringMVC 相关 ==================== + // @see SpringMvcConfiguration 类上的,@Import(SpanCustomizingAsyncHandlerInterceptor.class) + + + +} diff --git a/lab-40/lab-40-zipkin-dubbo/lab-40-zipkin-dubbo-consumer/src/main/resources/application.yaml b/lab-40/lab-40-zipkin-dubbo/lab-40-zipkin-dubbo-consumer/src/main/resources/application.yaml index 32af3588..ef960b5f 100644 --- a/lab-40/lab-40-zipkin-dubbo/lab-40-zipkin-dubbo-consumer/src/main/resources/application.yaml +++ b/lab-40/lab-40-zipkin-dubbo/lab-40-zipkin-dubbo-consumer/src/main/resources/application.yaml @@ -1,8 +1,15 @@ +spring: + application: + name: user-service-consumer + # dubbo 配置项,对应 DubboConfigurationProperties 配置类 dubbo: # Dubbo 应用配置 application: - name: user-service-consumer # 应用名 + name: ${spring.application.name} # 应用名 # Dubbo 注册中心配置 registry: address: zookeeper://127.0.0.1:2181 # 注册中心地址。个鞥多注册中心,可见 http://dubbo.apache.org/zh-cn/docs/user/references/registry/introduction.html 文档。 + # Dubbo 服务提供者的配置,对应 ConsumerConfig 类 + consumer: + filter: tracing diff --git a/lab-40/lab-40-zipkin-dubbo/lab-40-zipkin-dubbo-provider/pom.xml b/lab-40/lab-40-zipkin-dubbo/lab-40-zipkin-dubbo-provider/pom.xml index 9e6a301c..c818e108 100644 --- a/lab-40/lab-40-zipkin-dubbo/lab-40-zipkin-dubbo-provider/pom.xml +++ b/lab-40/lab-40-zipkin-dubbo/lab-40-zipkin-dubbo-provider/pom.xml @@ -50,6 +50,36 @@ 2.13.0 + + + + io.zipkin.brave + brave + + + io.zipkin.reporter2 + zipkin-sender-okhttp3 + + + + + io.zipkin.brave + brave-instrumentation-dubbo + 5.10.1 + + + + + + io.zipkin.brave + brave-bom + 5.9.1 + pom + import + + + + diff --git a/lab-40/lab-40-zipkin-dubbo/lab-40-zipkin-dubbo-provider/src/main/java/cn/iocoder/springboot/lab40/zipkindemo/providerdemo/config/ZipkinConfiguration.java b/lab-40/lab-40-zipkin-dubbo/lab-40-zipkin-dubbo-provider/src/main/java/cn/iocoder/springboot/lab40/zipkindemo/providerdemo/config/ZipkinConfiguration.java new file mode 100644 index 00000000..3348c706 --- /dev/null +++ b/lab-40/lab-40-zipkin-dubbo/lab-40-zipkin-dubbo-provider/src/main/java/cn/iocoder/springboot/lab40/zipkindemo/providerdemo/config/ZipkinConfiguration.java @@ -0,0 +1,57 @@ +package cn.iocoder.springboot.lab40.zipkindemo.providerdemo.config; + +import brave.CurrentSpanCustomizer; +import brave.SpanCustomizer; +import brave.Tracing; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import zipkin2.Span; +import zipkin2.reporter.AsyncReporter; +import zipkin2.reporter.Sender; +import zipkin2.reporter.okhttp3.OkHttpSender; + +@Configuration +public class ZipkinConfiguration { + + // ==================== 通用配置 ==================== + + /** + * Configuration for how to send spans to Zipkin + */ + @Bean + public Sender sender() { + return OkHttpSender.create("http://127.0.0.1:9411/api/v2/spans"); + } + + /** + * Configuration for how to buffer spans into messages for Zipkin + */ + @Bean + public AsyncReporter spanReporter() { + return AsyncReporter.create(sender()); + } + + /** + * Controls aspects of tracing such as the service name that shows up in the UI + */ + @Bean + public Tracing tracing(@Value("${spring.application.name}") String serviceName) { + return Tracing.newBuilder() + .localServiceName(serviceName) +// .currentTraceContext(ThreadLocalCurrentTraceContext.newBuilder() +// .addScopeDecorator(MDCScopeDecorator.create()) // puts trace IDs into logs +// .build() +// ) + .spanReporter(spanReporter()).build(); + } + + /** + * Allows someone to add tags to a span if a trace is in progress + */ + @Bean + public SpanCustomizer spanCustomizer(Tracing tracing) { + return CurrentSpanCustomizer.create(tracing); + } + +} diff --git a/lab-40/lab-40-zipkin-dubbo/lab-40-zipkin-dubbo-provider/src/main/resources/application.yaml b/lab-40/lab-40-zipkin-dubbo/lab-40-zipkin-dubbo-provider/src/main/resources/application.yaml index 3998dbeb..9fa121ee 100644 --- a/lab-40/lab-40-zipkin-dubbo/lab-40-zipkin-dubbo-provider/src/main/resources/application.yaml +++ b/lab-40/lab-40-zipkin-dubbo/lab-40-zipkin-dubbo-provider/src/main/resources/application.yaml @@ -1,8 +1,12 @@ +spring: + application: + name: user-service-provider + # dubbo 配置项,对应 DubboConfigurationProperties 配置类 dubbo: # Dubbo 应用配置 application: - name: user-service-provider # 应用名 + name: ${spring.application.name} # 应用名 # Dubbo 注册中心配 registry: address: zookeeper://127.0.0.1:2181 # 注册中心地址。个鞥多注册中心,可见 http://dubbo.apache.org/zh-cn/docs/user/references/registry/introduction.html 文档。 @@ -13,3 +17,6 @@ dubbo: # 配置扫描 Dubbo 自定义的 @Service 注解,暴露成 Dubbo 服务提供者 scan: base-packages: cn.iocoder.springboot.lab40.zipkindemo.providerdemo.service + # Dubbo 服务提供者的配置,对应 ProviderConfig 类 + provider: + filter: tracing diff --git a/labx-13/labx-13-sc-sleuth-dubbo/labx-13-sc-sleuth-dubbo-consumer/src/main/resources/application.yaml b/labx-13/labx-13-sc-sleuth-dubbo/labx-13-sc-sleuth-dubbo-consumer/src/main/resources/application.yaml index 696e55cd..45680e3e 100644 --- a/labx-13/labx-13-sc-sleuth-dubbo/labx-13-sc-sleuth-dubbo-consumer/src/main/resources/application.yaml +++ b/labx-13/labx-13-sc-sleuth-dubbo/labx-13-sc-sleuth-dubbo-consumer/src/main/resources/application.yaml @@ -16,7 +16,7 @@ dubbo: # Dubbo 服务注册中心配置,对应 RegistryConfig 类 registry: address: spring-cloud://127.0.0.1:8848 # 指定 Dubbo 服务注册中心的地址 - # Dubbo 服务提供者的配置,对应 ProviderConfig 类 + # Dubbo 服务提供者的配置,对应 ConsumerConfig 类 consumer: filter: tracing # Spring Cloud Alibaba Dubbo 专属配置项,对应 DubboCloudProperties 类