Commit 2a7e8d6f authored by 杨锐's avatar 杨锐

resolve TechExecutorServiceBuilderTrace @Component、@ConditionalOnClass({ElasticJob.class})

parent d667eabc
...@@ -17,6 +17,7 @@ ...@@ -17,6 +17,7 @@
<zipkin-reporter2.version>2.5.0</zipkin-reporter2.version> <zipkin-reporter2.version>2.5.0</zipkin-reporter2.version>
<zipkin.version>2.6.1</zipkin.version> <zipkin.version>2.6.1</zipkin.version>
<okhttp.version>3.10.0</okhttp.version> <okhttp.version>3.10.0</okhttp.version>
<elastic.job.version>2.1.5</elastic.job.version>
</properties> </properties>
<dependencyManagement> <dependencyManagement>
...@@ -45,6 +46,12 @@ ...@@ -45,6 +46,12 @@
<artifactId>spring-boot-starter-aop</artifactId> <artifactId>spring-boot-starter-aop</artifactId>
<optional>true</optional> <optional>true</optional>
</dependency> </dependency>
<dependency>
<groupId>com.dangdang</groupId>
<artifactId>elastic-job-lite-spring-shaded</artifactId>
<version>${elastic.job.version}</version>
<optional>true</optional>
</dependency>
<dependency> <dependency>
<groupId>org.apache.httpcomponents</groupId> <groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId> <artifactId>httpclient</artifactId>
......
package cn.quantgroup.tech.brave.aspect;
import brave.Tracer;
import brave.Tracing;
import com.dangdang.ddframe.job.api.ElasticJob;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.context.annotation.Configuration;
import javax.annotation.Resource;
@Aspect
@Configuration
@ConditionalOnClass(ElasticJob.class)
@ConditionalOnProperty(prefix = "tech.brave", name = "enabled", havingValue = "true", matchIfMissing = true)
public class ElasticJobAspect {
@Resource
private Tracing tracing;
@Around("target(com.dangdang.ddframe.job.api.ElasticJob)")
public Object dynamicTrace(ProceedingJoinPoint pjp) throws Throwable {
Tracer tracer = tracing.tracer();
/* 防止应用层非法使用(上下文中存在span),不生成root span。 */
if (tracer.currentSpan() == null) {
brave.Span span = tracer.newTrace();
try (Tracer.SpanInScope ws = tracer.withSpanInScope(span)) {
return pjp.proceed();
// note: try-with-resources closes the scope *before* the catch block
} catch (RuntimeException | Error e) {
span.error(e);
throw e;
} finally {
span.finish();
}
}
return pjp.proceed();
}
}
package cn.quantgroup.tech.brave.configuration; package cn.quantgroup.tech.brave.configuration;
import brave.Tracer;
import brave.Tracing; import brave.Tracing;
import brave.http.HttpTracing; import brave.http.HttpTracing;
import brave.httpclient.TracingHttpClientBuilder; import brave.httpclient.TracingHttpClientBuilder;
...@@ -12,27 +11,14 @@ import brave.spring.webmvc.SpanCustomizingAsyncHandlerInterceptor; ...@@ -12,27 +11,14 @@ import brave.spring.webmvc.SpanCustomizingAsyncHandlerInterceptor;
import cn.quantgroup.tech.brave.filter.CustomDelegatingTracingFilter; import cn.quantgroup.tech.brave.filter.CustomDelegatingTracingFilter;
import cn.quantgroup.tech.brave.properties.BraveProperties; import cn.quantgroup.tech.brave.properties.BraveProperties;
import cn.quantgroup.tech.brave.properties.ServiceProperties; import cn.quantgroup.tech.brave.properties.ServiceProperties;
import cn.quantgroup.tech.brave.service.ITechHttpClient; import cn.quantgroup.tech.brave.service.*;
import cn.quantgroup.tech.brave.service.ITechOkHttpClient; import cn.quantgroup.tech.brave.service.impl.*;
import cn.quantgroup.tech.brave.service.ITechRabbitBuilder;
import cn.quantgroup.tech.brave.service.ITechRestTemplateBuilder;
import cn.quantgroup.tech.brave.service.impl.TechHttpClientNoTrace;
import cn.quantgroup.tech.brave.service.impl.TechHttpClientTrace;
import cn.quantgroup.tech.brave.service.impl.TechOkHttpClientNoTrace;
import cn.quantgroup.tech.brave.service.impl.TechOkHttpClientTrace;
import cn.quantgroup.tech.brave.service.impl.TechRabbitBuilderNoTrace;
import cn.quantgroup.tech.brave.service.impl.TechRabbitBuilderTrace;
import cn.quantgroup.tech.brave.service.impl.TechRestTemplateBuilderTrace;
import cn.quantgroup.tech.brave.service.impl.TechRestTemplateBuliderNoTrace;
import cn.quantgroup.tech.brave.slf4j.MDCCurrentTraceContext; import cn.quantgroup.tech.brave.slf4j.MDCCurrentTraceContext;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import okhttp3.Dispatcher; import okhttp3.Dispatcher;
import okhttp3.OkHttpClient; import okhttp3.OkHttpClient;
import org.apache.http.client.HttpClient; import org.apache.http.client.HttpClient;
import org.apache.http.impl.client.HttpClientBuilder; import org.apache.http.impl.client.HttpClientBuilder;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.springframework.amqp.rabbit.core.RabbitTemplate; import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
...@@ -45,7 +31,6 @@ import org.springframework.context.annotation.Bean; ...@@ -45,7 +31,6 @@ import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import; import org.springframework.context.annotation.Import;
import org.springframework.http.client.ClientHttpRequestInterceptor; import org.springframework.http.client.ClientHttpRequestInterceptor;
import org.springframework.stereotype.Component;
import org.springframework.web.client.RestTemplate; import org.springframework.web.client.RestTemplate;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry; import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
...@@ -55,7 +40,6 @@ import zipkin2.reporter.AsyncReporter; ...@@ -55,7 +40,6 @@ import zipkin2.reporter.AsyncReporter;
import zipkin2.reporter.Sender; import zipkin2.reporter.Sender;
import zipkin2.reporter.kafka11.KafkaSender; import zipkin2.reporter.kafka11.KafkaSender;
import javax.annotation.Resource;
import javax.servlet.Filter; import javax.servlet.Filter;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
...@@ -195,7 +179,15 @@ public class BraveAutoConfiguration { ...@@ -195,7 +179,15 @@ public class BraveAutoConfiguration {
} }
} }
@Configuration
@ConditionalOnProperty(prefix = "tech.brave", name = "enabled", havingValue = "false", matchIfMissing = true)
public static class TechExecutorServiceEnable {
@Bean(name = "techExecutorServiceBuilder")
public ITechExecutorServiceBuilder techExecutorServiceBuilder() {
return new TechExecutorServiceBuilderNoTrace();
}
}
} }
@Configuration @Configuration
...@@ -413,37 +405,13 @@ public class BraveAutoConfiguration { ...@@ -413,37 +405,13 @@ public class BraveAutoConfiguration {
} }
} }
} @Configuration
@ConditionalOnProperty(prefix = "tech.brave", name = "enabled", havingValue = "true", matchIfMissing = true)
public static class TechExecutorServiceEnable {
@Configuration @Bean(name = "techExecutorServiceBuilder")
@ConditionalOnProperty(name = "elastic.job.enabled", havingValue = "true") public ITechExecutorServiceBuilder techExecutorServiceBuilder() {
public static class ElasticJobEnabled { return new TechExecutorServiceBuilderTrace();
@Aspect
@Component
public class ElasticJobAspect {
@Resource
private Tracing tracing;
@Around("target(com.dangdang.ddframe.job.api.ElasticJob)")
public Object dynamicTrace(ProceedingJoinPoint pjp) throws Throwable {
Tracer tracer = tracing.tracer();
/* 防止应用层非法使用(上下文中存在span),不生成root span。 */
if (tracer.currentSpan() == null) {
brave.Span span = tracer.newTrace();
try (Tracer.SpanInScope ws = tracer.withSpanInScope(span)) {
return pjp.proceed();
// note: try-with-resources closes the scope *before* the catch block
} catch (RuntimeException | Error e) {
span.error(e);
throw e;
} catch (Throwable e1) {
throw e1;
} finally {
span.finish();
}
}
return pjp.proceed();
} }
} }
} }
......
...@@ -2,7 +2,6 @@ package cn.quantgroup.tech.brave.service.impl; ...@@ -2,7 +2,6 @@ package cn.quantgroup.tech.brave.service.impl;
import cn.quantgroup.tech.brave.service.ITechExecutorServiceBuilder; import cn.quantgroup.tech.brave.service.ITechExecutorServiceBuilder;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import java.util.concurrent.ExecutorService; import java.util.concurrent.ExecutorService;
...@@ -13,7 +12,6 @@ import java.util.concurrent.ExecutorService; ...@@ -13,7 +12,6 @@ import java.util.concurrent.ExecutorService;
* @author: yangrui * @author: yangrui
*/ */
@Slf4j @Slf4j
@Component
public class TechExecutorServiceBuilderNoTrace implements ITechExecutorServiceBuilder { public class TechExecutorServiceBuilderNoTrace implements ITechExecutorServiceBuilder {
@Override @Override
public ExecutorService buildExecutorService(ExecutorService executorService) { public ExecutorService buildExecutorService(ExecutorService executorService) {
......
...@@ -4,7 +4,6 @@ import brave.propagation.CurrentTraceContext; ...@@ -4,7 +4,6 @@ import brave.propagation.CurrentTraceContext;
import cn.quantgroup.tech.brave.service.ITechExecutorServiceBuilder; import cn.quantgroup.tech.brave.service.ITechExecutorServiceBuilder;
import cn.quantgroup.tech.brave.slf4j.MDCCurrentTraceContext; import cn.quantgroup.tech.brave.slf4j.MDCCurrentTraceContext;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import java.util.concurrent.ExecutorService; import java.util.concurrent.ExecutorService;
...@@ -16,7 +15,6 @@ import java.util.concurrent.ExecutorService; ...@@ -16,7 +15,6 @@ import java.util.concurrent.ExecutorService;
* @author: yangrui * @author: yangrui
*/ */
@Slf4j @Slf4j
@Component
public class TechExecutorServiceBuilderTrace implements ITechExecutorServiceBuilder { public class TechExecutorServiceBuilderTrace implements ITechExecutorServiceBuilder {
@Override @Override
public ExecutorService buildExecutorService(ExecutorService executorService) { public ExecutorService buildExecutorService(ExecutorService executorService) {
......
...@@ -34,7 +34,7 @@ ...@@ -34,7 +34,7 @@
<lombok.version>1.16.20</lombok.version> <lombok.version>1.16.20</lombok.version>
<guava.version>23.0</guava.version> <guava.version>23.0</guava.version>
<apollo.client.version>0.10.2</apollo.client.version> <apollo.client.version>0.10.2</apollo.client.version>
<common.parent.version>0.2.5.5</common.parent.version> <common.parent.version>0.2.6</common.parent.version>
</properties> </properties>
<dependencies> <dependencies>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment