diff --git a/motan-extension/filter-extension/filter-opentracing/pom.xml b/motan-extension/filter-extension/filter-opentracing/pom.xml
index d27b7efeb..1b5b102df 100644
--- a/motan-extension/filter-extension/filter-opentracing/pom.xml
+++ b/motan-extension/filter-extension/filter-opentracing/pom.xml
@@ -21,6 +21,7 @@
https://github.com/weibocom/motan
UTF-8
+ 0.20.2
@@ -31,14 +32,19 @@
io.opentracing
opentracing-api
- 0.20.2
+ ${opentracing.version}
+
+
+ io.opentracing
+ opentracing-impl
+ ${opentracing.version}
io.opentracing
opentracing-mock
- 0.20.2
+ ${opentracing.version}
test
diff --git a/motan-extension/filter-extension/filter-opentracing/src/main/java/com/weibo/api/motan/filter/opentracing/OpenTracingFilter.java b/motan-extension/filter-extension/filter-opentracing/src/main/java/com/weibo/api/motan/filter/opentracing/OpenTracingFilter.java
index 25a20e04f..b8c334479 100644
--- a/motan-extension/filter-extension/filter-opentracing/src/main/java/com/weibo/api/motan/filter/opentracing/OpenTracingFilter.java
+++ b/motan-extension/filter-extension/filter-opentracing/src/main/java/com/weibo/api/motan/filter/opentracing/OpenTracingFilter.java
@@ -13,6 +13,7 @@
*/
package com.weibo.api.motan.filter.opentracing;
+import io.opentracing.NoopTracer;
import io.opentracing.Span;
import io.opentracing.SpanContext;
import io.opentracing.Tracer;
@@ -49,8 +50,8 @@ public class OpenTracingFilter implements Filter {
@Override
public Response filter(Caller> caller, Request request) {
- Tracer tracer = OpenTracingContext.getTracer();
- if (tracer == null) {
+ Tracer tracer = getTracer();
+ if (tracer == null || tracer instanceof NoopTracer) {
return caller.call(request);
}
if (caller instanceof Provider) { // server end
@@ -59,6 +60,10 @@ public Response filter(Caller> caller, Request request) {
return processRefererTrace(tracer, caller, request);
}
}
+
+ protected Tracer getTracer(){
+ return OpenTracingContext.getTracer();
+ }
/**
* process trace in client end
diff --git a/motan-extension/filter-extension/filter-opentracing/src/main/java/com/weibo/api/motan/filter/opentracing/TracerFactory.java b/motan-extension/filter-extension/filter-opentracing/src/main/java/com/weibo/api/motan/filter/opentracing/TracerFactory.java
index 5b7c47bdb..d94654b27 100644
--- a/motan-extension/filter-extension/filter-opentracing/src/main/java/com/weibo/api/motan/filter/opentracing/TracerFactory.java
+++ b/motan-extension/filter-extension/filter-opentracing/src/main/java/com/weibo/api/motan/filter/opentracing/TracerFactory.java
@@ -15,12 +15,13 @@
*/
package com.weibo.api.motan.filter.opentracing;
+import io.opentracing.NoopTracerFactory;
+import io.opentracing.Tracer;
+
import java.util.Iterator;
import java.util.ServiceLoader;
import com.weibo.api.motan.util.LoggerUtil;
-
-import io.opentracing.Tracer;
/**
*
* @Description TracerFactory
@@ -40,23 +41,29 @@ public interface TracerFactory {
Tracer getTracer();
class DefaultTracerFactory implements TracerFactory {
- private static Tracer tracer = null;
+ private static Tracer tracer = NoopTracerFactory.create();
static {
loadDefaultTracer();
}
/**
- * load SPI Tracer and set default. the first tracer was used if more than one tracer was
- * found.
+ * load SPI Tracer and set default only if one tracer is found.
*/
private static void loadDefaultTracer() {
try {
Iterator implementations = ServiceLoader.load(Tracer.class, Tracer.class.getClassLoader()).iterator();
if (implementations.hasNext()) {
- tracer = implementations.next();
- LoggerUtil.info("io.opentracing.Tracer load in DefaultTracerFactory, " + tracer.getClass().getSimpleName()
+ Tracer firstTracer = implementations.next();
+ if(!implementations.hasNext()){
+ // only one tracer is found.
+ tracer = firstTracer;
+ LoggerUtil.info("io.opentracing.Tracer load in DefaultTracerFactory, " + tracer.getClass().getSimpleName()
+ " is used as default tracer.");
+ } else {
+ LoggerUtil.info("io.opentracing.Tracer load in DefaultTracerFactory, NoopTracer is used as default tracer since more than one tracer is found.");
+ }
+
}
} catch (Exception e) {
LoggerUtil.warn("DefaultTracerFactory load Tracer fail.", e);