From b4d9ac6036ddc1149529d75cea0902c54a15a45d Mon Sep 17 00:00:00 2001 From: aslongyouloveme95 Date: Fri, 5 Jul 2019 17:19:56 +0800 Subject: [PATCH 1/2] add uber-trace-id for request header,so microservice can get this for inherit span --- .../spring/web/webfilter/TracingOperator.java | 20 ++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/opentracing-spring-web/src/main/java/io/opentracing/contrib/spring/web/webfilter/TracingOperator.java b/opentracing-spring-web/src/main/java/io/opentracing/contrib/spring/web/webfilter/TracingOperator.java index b7aa0b83..c1d05951 100644 --- a/opentracing-spring-web/src/main/java/io/opentracing/contrib/spring/web/webfilter/TracingOperator.java +++ b/opentracing-spring-web/src/main/java/io/opentracing/contrib/spring/web/webfilter/TracingOperator.java @@ -20,6 +20,7 @@ import io.opentracing.SpanContext; import io.opentracing.Tracer; import io.opentracing.propagation.Format; +import io.opentracing.propagation.TextMapAdapter; import io.opentracing.tag.Tags; import org.springframework.http.server.reactive.ServerHttpRequest; import org.springframework.web.server.ServerWebExchange; @@ -28,7 +29,10 @@ import reactor.core.publisher.MonoOperator; import reactor.util.context.Context; +import java.util.HashMap; +import java.util.Iterator; import java.util.List; +import java.util.Map; /** * Similar to {@code MonoWebFilterTrace} from spring-cloud-sleuth-core. @@ -72,7 +76,21 @@ public void subscribe(final CoreSubscriber subscriber) { try (final Scope scope = tracer.scopeManager().activate(span, false)) { exchange.getAttributes().put(TracingWebFilter.SERVER_SPAN_CONTEXT, span.context()); - source.subscribe(new TracingSubscriber(subscriber, exchange, context, span, spanDecorators)); + source.subscribe(new TracingSubscriber(subscriber, this.wrappleExchange(span), context, span, spanDecorators)); } } + + private ServerWebExchange wrappleExchange(Span span) { + Map map = new HashMap(); + this.tracer.inject(span.context(), Format.Builtin.HTTP_HEADERS, new TextMapAdapter(map)); + ServerHttpRequest req = this.exchange.getRequest(); + Iterator iterator = map.keySet().iterator(); + + while (iterator.hasNext()) { + String key = (String) iterator.next(); + req.mutate().header(key, map.get(key)); + } + + return this.exchange.mutate().request(req).build(); + } } From a7ee413bb1342021560c3b3e4665526d1ec505b0 Mon Sep 17 00:00:00 2001 From: aslongyouloveme95 Date: Mon, 8 Jul 2019 10:20:32 +0800 Subject: [PATCH 2/2] wrappleExchange method use foreach instead iterator --- .../spring/web/webfilter/TracingOperator.java | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/opentracing-spring-web/src/main/java/io/opentracing/contrib/spring/web/webfilter/TracingOperator.java b/opentracing-spring-web/src/main/java/io/opentracing/contrib/spring/web/webfilter/TracingOperator.java index c1d05951..8bbb61a6 100644 --- a/opentracing-spring-web/src/main/java/io/opentracing/contrib/spring/web/webfilter/TracingOperator.java +++ b/opentracing-spring-web/src/main/java/io/opentracing/contrib/spring/web/webfilter/TracingOperator.java @@ -84,13 +84,13 @@ private ServerWebExchange wrappleExchange(Span span) { Map map = new HashMap(); this.tracer.inject(span.context(), Format.Builtin.HTTP_HEADERS, new TextMapAdapter(map)); ServerHttpRequest req = this.exchange.getRequest(); - Iterator iterator = map.keySet().iterator(); - - while (iterator.hasNext()) { - String key = (String) iterator.next(); - req.mutate().header(key, map.get(key)); + if (map.isEmpty()) { + return this.exchange; + } else { + for (String key : map.keySet()) { + req.mutate().header(key, map.get(key)); + } } - return this.exchange.mutate().request(req).build(); } }