diff --git a/spring-cloud-sleuth-dependencies/pom.xml b/spring-cloud-sleuth-dependencies/pom.xml
index f189a865b..b7806f348 100644
--- a/spring-cloud-sleuth-dependencies/pom.xml
+++ b/spring-cloud-sleuth-dependencies/pom.xml
@@ -17,7 +17,7 @@
3.4.0
1.1.0.BUILD-SNAPSHOT
1.8.4
- 0.5.5
+ 0.6.0
diff --git a/spring-cloud-sleuth-samples/pom.xml b/spring-cloud-sleuth-samples/pom.xml
index 95cc70d70..15fc88916 100644
--- a/spring-cloud-sleuth-samples/pom.xml
+++ b/spring-cloud-sleuth-samples/pom.xml
@@ -62,12 +62,12 @@
io.zipkin.java
zipkin
- 0.5.5
+ 0.6.0
io.zipkin.java
zipkin-server
- 0.5.5
+ 0.6.0
diff --git a/spring-cloud-sleuth-samples/spring-cloud-sleuth-sample-zipkin/docker-compose.yml b/spring-cloud-sleuth-samples/spring-cloud-sleuth-sample-zipkin/docker-compose.yml
index 7a83209fb..39d546d2b 100644
--- a/spring-cloud-sleuth-samples/spring-cloud-sleuth-sample-zipkin/docker-compose.yml
+++ b/spring-cloud-sleuth-samples/spring-cloud-sleuth-sample-zipkin/docker-compose.yml
@@ -1,9 +1,9 @@
mysql:
- image: openzipkin/zipkin-mysql:1.33.2
+ image: openzipkin/zipkin-mysql:1.34.0
ports:
- 3306:3306
query:
- image: openzipkin/zipkin-java:0.5.3
+ image: openzipkin/zipkin-java:0.6.0
environment:
# Remove TRANSPORT_TYPE to disable tracing
- TRANSPORT_TYPE=http
@@ -16,7 +16,7 @@ query:
links:
- mysql:storage
web:
- image: openzipkin/zipkin-web:1.33.2
+ image: openzipkin/zipkin-web:1.34.0
environment:
# Remove TRANSPORT_TYPE to disable tracing
- TRANSPORT_TYPE=http
diff --git a/spring-cloud-sleuth-samples/spring-cloud-sleuth-sample-zipkin/src/test/java/integration/ZipkinTests.java b/spring-cloud-sleuth-samples/spring-cloud-sleuth-sample-zipkin/src/test/java/integration/ZipkinTests.java
index b775e4431..6a9178018 100644
--- a/spring-cloud-sleuth-samples/spring-cloud-sleuth-sample-zipkin/src/test/java/integration/ZipkinTests.java
+++ b/spring-cloud-sleuth-samples/spring-cloud-sleuth-sample-zipkin/src/test/java/integration/ZipkinTests.java
@@ -102,7 +102,7 @@ public class ZipkinTests extends AbstractIntegrationTest {
private ZipkinSpanReporter getSpanCollector(ZipkinProperties zipkin,
SpanReporterService spanReporterService) {
return new HttpZipkinSpanReporter(zipkin.getBaseUrl(), zipkin.getFlushInterval(),
- spanReporterService);
+ zipkin.getCompression().isEnabled(), spanReporterService);
}
}
diff --git a/spring-cloud-sleuth-zipkin/docker-compose.yml b/spring-cloud-sleuth-zipkin/docker-compose.yml
index 7a83209fb..39d546d2b 100644
--- a/spring-cloud-sleuth-zipkin/docker-compose.yml
+++ b/spring-cloud-sleuth-zipkin/docker-compose.yml
@@ -1,9 +1,9 @@
mysql:
- image: openzipkin/zipkin-mysql:1.33.2
+ image: openzipkin/zipkin-mysql:1.34.0
ports:
- 3306:3306
query:
- image: openzipkin/zipkin-java:0.5.3
+ image: openzipkin/zipkin-java:0.6.0
environment:
# Remove TRANSPORT_TYPE to disable tracing
- TRANSPORT_TYPE=http
@@ -16,7 +16,7 @@ query:
links:
- mysql:storage
web:
- image: openzipkin/zipkin-web:1.33.2
+ image: openzipkin/zipkin-web:1.34.0
environment:
# Remove TRANSPORT_TYPE to disable tracing
- TRANSPORT_TYPE=http
diff --git a/spring-cloud-sleuth-zipkin/src/main/java/org/springframework/cloud/sleuth/zipkin/HttpZipkinSpanReporter.java b/spring-cloud-sleuth-zipkin/src/main/java/org/springframework/cloud/sleuth/zipkin/HttpZipkinSpanReporter.java
index bf46da371..2e3ba3b11 100644
--- a/spring-cloud-sleuth-zipkin/src/main/java/org/springframework/cloud/sleuth/zipkin/HttpZipkinSpanReporter.java
+++ b/spring-cloud-sleuth-zipkin/src/main/java/org/springframework/cloud/sleuth/zipkin/HttpZipkinSpanReporter.java
@@ -20,6 +20,7 @@ import org.springframework.cloud.sleuth.metric.SpanReporterService;
import zipkin.Codec;
import zipkin.Span;
+import zipkin.internal.Util;
import static java.util.concurrent.TimeUnit.SECONDS;
@@ -39,17 +40,20 @@ public final class HttpZipkinSpanReporter
private final String url;
private final BlockingQueue pending = new LinkedBlockingQueue<>(1000);
private final Flusher flusher; // Nullable for testing
+ private final boolean compressionEnabled;
private final SpanReporterService spanReporterService;
/**
* @param baseUrl URL of the zipkin query server instance. Like: http://localhost:9411/
* @param flushInterval in seconds. 0 implies spans are {@link #flush() flushed} externally.
+ * @param compressionEnabled compress spans using gzip before posting to the zipkin server.
* @param spanReporterService service to count number of accepted / dropped spans
*/
- public HttpZipkinSpanReporter(String baseUrl, int flushInterval,
+ public HttpZipkinSpanReporter(String baseUrl, int flushInterval, boolean compressionEnabled,
SpanReporterService spanReporterService) {
this.url = baseUrl + (baseUrl.endsWith("/") ? "" : "/") + "api/v1/spans";
this.flusher = flushInterval > 0 ? new Flusher(this, flushInterval) : null;
+ this.compressionEnabled = compressionEnabled;
this.spanReporterService = spanReporterService;
}
@@ -129,19 +133,21 @@ public final class HttpZipkinSpanReporter
HttpURLConnection connection = (HttpURLConnection) new URL(this.url).openConnection();
connection.setRequestMethod("POST");
connection.addRequestProperty("Content-Type", "application/json");
+ if (this.compressionEnabled) {
+ connection.addRequestProperty("Content-Encoding", "gzip");
+ json = Util.gzip(json);
+ }
connection.setDoOutput(true);
connection.setFixedLengthStreamingMode(json.length);
connection.getOutputStream().write(json);
try (InputStream in = connection.getInputStream()) {
- while (in.read() != -1)
- ; // skip
+ while (in.read() != -1); // skip
}
catch (IOException e) {
try (InputStream err = connection.getErrorStream()) {
if (err != null) { // possible, if the connection was dropped
- while (err.read() != -1)
- ; // skip
+ while (err.read() != -1); // skip
}
}
throw e;
diff --git a/spring-cloud-sleuth-zipkin/src/main/java/org/springframework/cloud/sleuth/zipkin/ZipkinAutoConfiguration.java b/spring-cloud-sleuth-zipkin/src/main/java/org/springframework/cloud/sleuth/zipkin/ZipkinAutoConfiguration.java
index b604f2b9a..1367ab14f 100644
--- a/spring-cloud-sleuth-zipkin/src/main/java/org/springframework/cloud/sleuth/zipkin/ZipkinAutoConfiguration.java
+++ b/spring-cloud-sleuth-zipkin/src/main/java/org/springframework/cloud/sleuth/zipkin/ZipkinAutoConfiguration.java
@@ -54,7 +54,7 @@ public class ZipkinAutoConfiguration {
@ConditionalOnMissingBean(ZipkinSpanReporter.class)
public ZipkinSpanReporter reporter(SpanReporterService spanReporterService, ZipkinProperties zipkin) {
return new HttpZipkinSpanReporter(zipkin.getBaseUrl(), zipkin.getFlushInterval(),
- spanReporterService);
+ zipkin.getCompression().isEnabled(), spanReporterService);
}
@Bean
diff --git a/spring-cloud-sleuth-zipkin/src/main/java/org/springframework/cloud/sleuth/zipkin/ZipkinProperties.java b/spring-cloud-sleuth-zipkin/src/main/java/org/springframework/cloud/sleuth/zipkin/ZipkinProperties.java
index eaa075beb..bcb37fef0 100644
--- a/spring-cloud-sleuth-zipkin/src/main/java/org/springframework/cloud/sleuth/zipkin/ZipkinProperties.java
+++ b/spring-cloud-sleuth-zipkin/src/main/java/org/springframework/cloud/sleuth/zipkin/ZipkinProperties.java
@@ -31,6 +31,7 @@ public class ZipkinProperties {
private String baseUrl = "http://localhost:9411/";
private boolean enabled = true;
private int flushInterval = 1;
+ private Compression compression = new Compression();
public String getBaseUrl() {
return this.baseUrl;
@@ -44,6 +45,10 @@ public class ZipkinProperties {
return this.flushInterval;
}
+ public Compression getCompression() {
+ return this.compression;
+ }
+
public void setBaseUrl(String baseUrl) {
this.baseUrl = baseUrl;
}
@@ -55,4 +60,22 @@ public class ZipkinProperties {
public void setFlushInterval(int flushInterval) {
this.flushInterval = flushInterval;
}
+
+ public void setCompression(Compression compression) {
+ this.compression = compression;
+ }
+
+ /** When enabled, spans are gzipped before sent to the zipkin server */
+ public static class Compression {
+
+ private boolean enabled = false;
+
+ public boolean isEnabled() {
+ return this.enabled;
+ }
+
+ public void setEnabled(boolean enabled) {
+ this.enabled = enabled;
+ }
+ }
}
diff --git a/spring-cloud-sleuth-zipkin/src/test/java/org/springframework/cloud/sleuth/zipkin/HttpZipkinSpanReporterTest.java b/spring-cloud-sleuth-zipkin/src/test/java/org/springframework/cloud/sleuth/zipkin/HttpZipkinSpanReporterTest.java
index 76796ae28..83e081323 100644
--- a/spring-cloud-sleuth-zipkin/src/test/java/org/springframework/cloud/sleuth/zipkin/HttpZipkinSpanReporterTest.java
+++ b/spring-cloud-sleuth-zipkin/src/test/java/org/springframework/cloud/sleuth/zipkin/HttpZipkinSpanReporterTest.java
@@ -19,9 +19,12 @@ public class HttpZipkinSpanReporterTest {
SpanReporterService spanReporterService = new CounterServiceBasedSpanReporterService("accepted", "dropped",
this.inMemorySpanCounter);
- // set flush interval to 0 so that tests can drive flushing explicitly
HttpZipkinSpanReporter reporter = new HttpZipkinSpanReporter(
- this.zipkin.httpUrl(), 0, this.spanReporterService);
+ this.zipkin.httpUrl(),
+ 0, // so that tests can drive flushing explicitly
+ false, // disable compression
+ this.spanReporterService
+ );
@Test
public void reportDoesntDoIO() throws Exception {
@@ -64,6 +67,29 @@ public class HttpZipkinSpanReporterTest {
}
@Test
+ public void postsCompressedSpans() throws Exception {
+ this.reporter = new HttpZipkinSpanReporter(
+ this.zipkin.httpUrl(),
+ 0, // so that tests can drive flushing explicitly
+ false, // enable compression
+ this.spanReporterService
+ );
+
+ this.reporter.report(span(1L, "foo"));
+ this.reporter.report(span(2L, "bar"));
+
+ this.reporter.flush(); // manually flush the spans
+
+ // Ensure only one request was sent
+ assertThat(this.zipkin.httpRequestCount()).isEqualTo(1);
+
+ assertThat(this.zipkin.getTraces()).containsExactly(
+ asList(span(1L, "foo")),
+ asList(span(2L, "bar"))
+ );
+ }
+
+ @Test
public void incrementsDroppedSpansWhenServerErrors() throws Exception {
this.zipkin.enqueueFailure(HttpFailure.sendErrorResponse(500, "Ouch"));