You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2016/04/01 13:56:22 UTC
[4/6] camel git commit: CAMEL-9759: camel-zipkin - Instrument Camel.
Work in progress.
CAMEL-9759: camel-zipkin - Instrument Camel. Work in progress.
Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/a8b941e5
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/a8b941e5
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/a8b941e5
Branch: refs/heads/master
Commit: a8b941e59c89db995431b367a76618ac359d5d33
Parents: a9da3a6
Author: Claus Ibsen <da...@apache.org>
Authored: Fri Apr 1 10:21:10 2016 +0200
Committer: Claus Ibsen <da...@apache.org>
Committed: Fri Apr 1 13:55:21 2016 +0200
----------------------------------------------------------------------
.../camel/zipkin/ZipkinEventNotifier.java | 46 ++++++++++----------
.../org/apache/camel/zipkin/ZipkinHelper.java | 2 +-
.../zipkin/ZipkinServerRequestAdapter.java | 4 +-
.../org/apache/camel/zipkin/ZipkinState.java | 10 ++++-
.../main/java/sample/camel/Service1Route.java | 4 +-
examples/camel-example-zipkin/service2/pom.xml | 4 ++
.../main/java/sample/camel/Service2Route.java | 7 ++-
.../src/main/resources/application.properties | 6 ++-
8 files changed, 51 insertions(+), 32 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/camel/blob/a8b941e5/components/camel-zipkin/src/main/java/org/apache/camel/zipkin/ZipkinEventNotifier.java
----------------------------------------------------------------------
diff --git a/components/camel-zipkin/src/main/java/org/apache/camel/zipkin/ZipkinEventNotifier.java b/components/camel-zipkin/src/main/java/org/apache/camel/zipkin/ZipkinEventNotifier.java
index 8f3c6e2..85f5afc 100644
--- a/components/camel-zipkin/src/main/java/org/apache/camel/zipkin/ZipkinEventNotifier.java
+++ b/components/camel-zipkin/src/main/java/org/apache/camel/zipkin/ZipkinEventNotifier.java
@@ -501,7 +501,8 @@ public class ZipkinEventNotifier extends EventNotifierSupport implements Statefu
}
private void clientRequest(Brave brave, String serviceName, ExchangeSendingEvent event) {
- ClientSpanThreadBinder binder = brave.clientSpanThreadBinder();
+ ClientSpanThreadBinder clientBinder = brave.clientSpanThreadBinder();
+ ServerSpanThreadBinder serverBinder = brave.serverSpanThreadBinder();
// reuse existing span if we do multiple requests from the same
ZipkinState state = event.getExchange().getProperty(ZipkinState.KEY, ZipkinState.class);
@@ -509,21 +510,22 @@ public class ZipkinEventNotifier extends EventNotifierSupport implements Statefu
state = new ZipkinState();
event.getExchange().setProperty(ZipkinState.KEY, state);
}
+ // need to store the last span in use whether it was a server or client based span
Object last = state.getLast();
if (last != null && last instanceof Span) {
- binder.setCurrentSpan((Span) last);
+ clientBinder.setCurrentSpan((Span) last);
} else if (last != null && last instanceof ServerSpan) {
- Span span = ((ServerSpan) last).getSpan();
- binder.setCurrentSpan(span);
+ serverBinder.setCurrentSpan((ServerSpan) last);
}
brave.clientRequestInterceptor().handle(new ZipkinClientRequestAdapter(this, serviceName, event.getExchange(), event.getEndpoint()));
// store span after request
- Span span = binder.getCurrentClientSpan();
+ Span span = clientBinder.getCurrentClientSpan();
state.pushClientSpan(span);
// and reset binder
- binder.setCurrentSpan(null);
+ clientBinder.setCurrentSpan(null);
+ serverBinder.setCurrentSpan(null);
if (log.isDebugEnabled()) {
String traceId = "<null>";
@@ -546,16 +548,16 @@ public class ZipkinEventNotifier extends EventNotifierSupport implements Statefu
Span span = null;
ZipkinState state = event.getExchange().getProperty(ZipkinState.KEY, ZipkinState.class);
if (state != null) {
+ // only process if it was a zipkin client event
span = state.popClientSpan();
}
if (span != null) {
- // only process if it was a zipkin client event
- ClientSpanThreadBinder binder = brave.clientSpanThreadBinder();
- binder.setCurrentSpan(span);
+ ClientSpanThreadBinder clientBinder = brave.clientSpanThreadBinder();
+ clientBinder.setCurrentSpan(span);
brave.clientResponseInterceptor().handle(new ZipkinClientResponseAdaptor(this, event.getExchange(), event.getEndpoint()));
// and reset binder
- binder.setCurrentSpan(null);
+ clientBinder.setCurrentSpan(null);
if (log.isDebugEnabled()) {
String traceId = "" + span.getTrace_id();
@@ -567,7 +569,7 @@ public class ZipkinEventNotifier extends EventNotifierSupport implements Statefu
}
private void serverRequest(Brave brave, String serviceName, ExchangeCreatedEvent event) {
- ServerSpanThreadBinder binder = brave.serverSpanThreadBinder();
+ ServerSpanThreadBinder serverBinder = brave.serverSpanThreadBinder();
// reuse existing span if we do multiple requests from the same
ZipkinState state = event.getExchange().getProperty(ZipkinState.KEY, ZipkinState.class);
@@ -577,16 +579,16 @@ public class ZipkinEventNotifier extends EventNotifierSupport implements Statefu
}
Object last = state.getLast();
if (last != null && last instanceof ServerSpan) {
- binder.setCurrentSpan((ServerSpan) last);
+ serverBinder.setCurrentSpan((ServerSpan) last);
}
brave.serverRequestInterceptor().handle(new ZipkinServerRequestAdapter(this, event.getExchange()));
// store span after request
- ServerSpan span = binder.getCurrentServerSpan();
+ ServerSpan span = serverBinder.getCurrentServerSpan();
state.pushServerSpan(span);
// and reset binder
- binder.setCurrentSpan(null);
+ serverBinder.setCurrentSpan(null);
if (log.isDebugEnabled()) {
String traceId = "<null>";
@@ -609,16 +611,16 @@ public class ZipkinEventNotifier extends EventNotifierSupport implements Statefu
ServerSpan span = null;
ZipkinState state = event.getExchange().getProperty(ZipkinState.KEY, ZipkinState.class);
if (state != null) {
+ // only process if it was a zipkin server event
span = state.popServerSpan();
}
if (span != null) {
- // only process if it was a zipkin server event
- ServerSpanThreadBinder binder = brave.serverSpanThreadBinder();
- binder.setCurrentSpan(span);
+ ServerSpanThreadBinder serverBinder = brave.serverSpanThreadBinder();
+ serverBinder.setCurrentSpan(span);
brave.serverResponseInterceptor().handle(new ZipkinServerResponseAdapter(this, event.getExchange()));
// and reset binder
- binder.setCurrentSpan(null);
+ serverBinder.setCurrentSpan(null);
if (log.isDebugEnabled()) {
String traceId = "<null>";
@@ -642,16 +644,16 @@ public class ZipkinEventNotifier extends EventNotifierSupport implements Statefu
ServerSpan span = null;
ZipkinState state = event.getExchange().getProperty(ZipkinState.KEY, ZipkinState.class);
if (state != null) {
+ // only process if it was a zipkin server event
span = state.popServerSpan();
}
if (span != null) {
- // only process if it was a zipkin server event
- ServerSpanThreadBinder binder = brave.serverSpanThreadBinder();
- binder.setCurrentSpan(span);
+ ServerSpanThreadBinder serverBinder = brave.serverSpanThreadBinder();
+ serverBinder.setCurrentSpan(span);
brave.serverResponseInterceptor().handle(new ZipkinServerResponseAdapter(this, event.getExchange()));
// and reset binder
- binder.setCurrentSpan(null);
+ serverBinder.setCurrentSpan(null);
if (log.isDebugEnabled()) {
String traceId = "<null>";
http://git-wip-us.apache.org/repos/asf/camel/blob/a8b941e5/components/camel-zipkin/src/main/java/org/apache/camel/zipkin/ZipkinHelper.java
----------------------------------------------------------------------
diff --git a/components/camel-zipkin/src/main/java/org/apache/camel/zipkin/ZipkinHelper.java b/components/camel-zipkin/src/main/java/org/apache/camel/zipkin/ZipkinHelper.java
index 630f828..96d86b7 100644
--- a/components/camel-zipkin/src/main/java/org/apache/camel/zipkin/ZipkinHelper.java
+++ b/components/camel-zipkin/src/main/java/org/apache/camel/zipkin/ZipkinHelper.java
@@ -27,7 +27,7 @@ public final class ZipkinHelper {
private ZipkinHelper() {
}
- public static SpanId getSpanId(String traceId, String spanId, String parentSpanId) {
+ public static SpanId createSpanId(String traceId, String spanId, String parentSpanId) {
if (parentSpanId != null) {
return SpanId.create(IdConversion.convertToLong(traceId), IdConversion.convertToLong(spanId), IdConversion.convertToLong(parentSpanId));
}
http://git-wip-us.apache.org/repos/asf/camel/blob/a8b941e5/components/camel-zipkin/src/main/java/org/apache/camel/zipkin/ZipkinServerRequestAdapter.java
----------------------------------------------------------------------
diff --git a/components/camel-zipkin/src/main/java/org/apache/camel/zipkin/ZipkinServerRequestAdapter.java b/components/camel-zipkin/src/main/java/org/apache/camel/zipkin/ZipkinServerRequestAdapter.java
index 0d7605d..76eadad 100644
--- a/components/camel-zipkin/src/main/java/org/apache/camel/zipkin/ZipkinServerRequestAdapter.java
+++ b/components/camel-zipkin/src/main/java/org/apache/camel/zipkin/ZipkinServerRequestAdapter.java
@@ -30,7 +30,7 @@ import org.apache.camel.Exchange;
import org.apache.camel.util.MessageHelper;
import org.apache.camel.util.URISupport;
-import static org.apache.camel.zipkin.ZipkinHelper.getSpanId;
+import static org.apache.camel.zipkin.ZipkinHelper.createSpanId;
public class ZipkinServerRequestAdapter implements ServerRequestAdapter {
@@ -58,7 +58,7 @@ public class ZipkinServerRequestAdapter implements ServerRequestAdapter {
String spanId = exchange.getIn().getHeader(ZipkinConstants.SPAN_ID, String.class);
String parentSpanId = exchange.getIn().getHeader(ZipkinConstants.PARENT_SPAN_ID, String.class);
if (traceId != null && spanId != null) {
- SpanId span = getSpanId(traceId, spanId, parentSpanId);
+ SpanId span = createSpanId(traceId, spanId, parentSpanId);
return TraceData.builder().sample(true).spanId(span).build();
}
}
http://git-wip-us.apache.org/repos/asf/camel/blob/a8b941e5/components/camel-zipkin/src/main/java/org/apache/camel/zipkin/ZipkinState.java
----------------------------------------------------------------------
diff --git a/components/camel-zipkin/src/main/java/org/apache/camel/zipkin/ZipkinState.java b/components/camel-zipkin/src/main/java/org/apache/camel/zipkin/ZipkinState.java
index d09af34..0c9ed83 100644
--- a/components/camel-zipkin/src/main/java/org/apache/camel/zipkin/ZipkinState.java
+++ b/components/camel-zipkin/src/main/java/org/apache/camel/zipkin/ZipkinState.java
@@ -20,8 +20,16 @@ import java.util.Stack;
import com.github.kristofa.brave.ServerSpan;
import com.twitter.zipkin.gen.Span;
+import org.apache.camel.Exchange;
-public class ZipkinState {
+/**
+ * The state of the zipkin trace which we store on the {@link Exchange}
+ * <p/>
+ * This is needed to keep track of of correlating when an existing span
+ * is calling downstream service(s) and therefore must be able to correlate
+ * those service calls with the parent span.
+ */
+public final class ZipkinState {
public static final String KEY = "CamelZipkinState";
http://git-wip-us.apache.org/repos/asf/camel/blob/a8b941e5/examples/camel-example-zipkin/service1/src/main/java/sample/camel/Service1Route.java
----------------------------------------------------------------------
diff --git a/examples/camel-example-zipkin/service1/src/main/java/sample/camel/Service1Route.java b/examples/camel-example-zipkin/service1/src/main/java/sample/camel/Service1Route.java
index 7e1be20..f91ca5a 100644
--- a/examples/camel-example-zipkin/service1/src/main/java/sample/camel/Service1Route.java
+++ b/examples/camel-example-zipkin/service1/src/main/java/sample/camel/Service1Route.java
@@ -32,7 +32,7 @@ public class Service1Route extends RouteBuilder {
zipkin.setHostName("192.168.99.100");
zipkin.setPort(9410);
zipkin.addClientServiceMapping("http://localhost:9090/service2", "service2");
- zipkin.addClientServiceMapping("http://localhost:7070/service3", "service3");
+// zipkin.addClientServiceMapping("http://localhost:7070/service3", "service3");
// add zipkin to CamelContext
getContext().getManagementStrategy().addEventNotifier(zipkin);
@@ -40,7 +40,7 @@ public class Service1Route extends RouteBuilder {
from("timer:trigger?exchangePattern=InOut&period=30s")
.bean("counterBean")
.to("http://localhost:9090/service2")
- .to("http://localhost:7070/service3")
+// .to("http://localhost:7070/service3")
.log("Result: ${body}");
}
http://git-wip-us.apache.org/repos/asf/camel/blob/a8b941e5/examples/camel-example-zipkin/service2/pom.xml
----------------------------------------------------------------------
diff --git a/examples/camel-example-zipkin/service2/pom.xml b/examples/camel-example-zipkin/service2/pom.xml
index d037c9a..a28b997 100644
--- a/examples/camel-example-zipkin/service2/pom.xml
+++ b/examples/camel-example-zipkin/service2/pom.xml
@@ -74,6 +74,10 @@
<groupId>org.apache.camel</groupId>
<artifactId>camel-jetty</artifactId>
</dependency>
+ <dependency>
+ <groupId>org.apache.camel</groupId>
+ <artifactId>camel-http</artifactId>
+ </dependency>
</dependencies>
http://git-wip-us.apache.org/repos/asf/camel/blob/a8b941e5/examples/camel-example-zipkin/service2/src/main/java/sample/camel/Service2Route.java
----------------------------------------------------------------------
diff --git a/examples/camel-example-zipkin/service2/src/main/java/sample/camel/Service2Route.java b/examples/camel-example-zipkin/service2/src/main/java/sample/camel/Service2Route.java
index e95582b..e81f152 100644
--- a/examples/camel-example-zipkin/service2/src/main/java/sample/camel/Service2Route.java
+++ b/examples/camel-example-zipkin/service2/src/main/java/sample/camel/Service2Route.java
@@ -24,10 +24,13 @@ public class Service2Route extends RouteBuilder {
@Override
public void configure() throws Exception {
- from("jetty:http://0.0.0.0:{{jetty.port}}/service2").routeId("service2")
+ from("jetty:http://0.0.0.0:{{service2.port}}/service2").routeId("service2")
+ .removeHeaders("CamelHttp*")
.convertBodyTo(String.class)
.delay(simple("${random(1000,2000)}"))
- .transform(simple("Hello: ${body}"));
+ .transform(simple("Hello: ${body}"))
+ .to("http://0.0.0.0:{{service3.port}}/service3");
+
}
}
http://git-wip-us.apache.org/repos/asf/camel/blob/a8b941e5/examples/camel-example-zipkin/service2/src/main/resources/application.properties
----------------------------------------------------------------------
diff --git a/examples/camel-example-zipkin/service2/src/main/resources/application.properties b/examples/camel-example-zipkin/service2/src/main/resources/application.properties
index a8673a9..5212f4e 100644
--- a/examples/camel-example-zipkin/service2/src/main/resources/application.properties
+++ b/examples/camel-example-zipkin/service2/src/main/resources/application.properties
@@ -24,7 +24,8 @@ camel.zipkin.host-name=192.168.99.100
camel.zipkin.port=9410
# the zipkin service name
-camel.zipkin.service-name=service2
+camel.zipkin.server-service-mappings.*=service2
+camel.zipkin.client-service-mappings.*=service3
# include the message body in the zipkin traces
camel.zipkin.include-message-body=true
@@ -33,5 +34,6 @@ camel.zipkin.include-message-body=true
logging.level.org.apache.camel.zipkin=debug
# the port number the service will use for accepting incoming HTTP requests
-jetty.port=9090
+service2.port=9090
+service3.port=7070