Added docs with an example of CompletableFuture usage

This commit is contained in:
Marcin Grzejszczak
2016-04-19 10:01:17 +02:00
parent 7dc30191cc
commit 2806747c6e
2 changed files with 28 additions and 0 deletions

View File

@@ -487,6 +487,14 @@ If you want to skip Span creation for some `@Scheduled` annotated classes you ca
We're providing `LazyTraceExecutor`, `TraceableExecutorService` and `TraceableScheduledExecutorService`. Those implementations
are creating Spans each time a new task is submitted, invoked or scheduled.
Here you can see an example of how to pass tracing information with `TraceableExecutorService` when working with `CompletableFuture`:
[source,java]
----
include::../../../../spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/async/TraceableExecutorServiceTests.java[tags=completablefuture,indent=0]
----
=== Messaging
Spring Cloud Sleuth integrates with http://projects.spring.io/spring-integration/[Spring Integration]. It creates spans for publish and

View File

@@ -15,6 +15,7 @@ import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.runners.MockitoJUnitRunner;
import org.springframework.cloud.sleuth.DefaultSpanNamer;
import org.springframework.cloud.sleuth.NoOpSpanReporter;
import org.springframework.cloud.sleuth.Span;
import org.springframework.cloud.sleuth.SpanNamer;
@@ -66,6 +67,25 @@ public class TraceableExecutorServiceTests {
then(this.spanVerifyingRunnable.spanIds.stream().distinct().collect(toList())).hasSize(TOTAL_THREADS);
}
@Test
public void should_propagate_trace_info_when_compleable_future_is_used() throws Exception {
Tracer tracer = this.tracer;
TraceKeys traceKeys = new TraceKeys();
SpanNamer spanNamer = new DefaultSpanNamer();
// tag::completablefuture[]
CompletableFuture<Long> completableFuture = CompletableFuture.supplyAsync(() -> {
// perform some logic
return 1_000_000L;
}, new TraceableExecutorService(Executors.newCachedThreadPool(),
// 'calculateTax' explicitly names the span - this param is optional
tracer, traceKeys, spanNamer, "calculateTax"));
// end::completablefuture[]
then(completableFuture.get()).isEqualTo(1_000_000L);
then(this.tracer.getCurrentSpan()).isNull();
}
private CompletableFuture<?>[] runnablesExecutedViaTraceManagerableExecutorService() {
List<CompletableFuture<?>> futures = new ArrayList<>();
for (int i = 0; i < TOTAL_THREADS; i++) {