Added docs with an example of CompletableFuture usage
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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++) {
|
||||
|
||||
Reference in New Issue
Block a user