Top Description Methods
io.opentelemetry.context.propagation

public Interface ContextPropagators

Known Direct Implementers
io.opentelemetry.context.propagation.DefaultContextPropagators
Annotations
@ThreadSafe
Static Imports
java.util.Objects.requireNonNull

A container of the registered propagators for every supported format.

This container can be used to access a single, composite propagator for each supported format, which will be responsible for injecting and extracting data for each registered concern (traces, correlations, etc). Propagation will happen through io.opentelemetry.context.Context, from which values will be read upon injection, and which will store values from the extraction step. The resulting Context can then be used implicitly or explicitly by the OpenTelemetry API.

Example of usage on the client:

void onSendRequest() {
  try (Scope ignored = span.makeCurrent()) {
    ContextPropagators propagators = openTelemetry.getPropagators();
    TextMapPropagator textMapPropagator = propagators.getTextMapPropagator();

    // Inject the span's SpanContext and other available concerns (such as correlations)
    // contained in the specified Context.
    Map<String, String> map = new HashMap<>();
    textMapPropagator.inject(Context.current(), map, new Setter<String, String>() {
      public void put(Map<String, String> map, String key, String value) {
        map.put(key, value);
      }
    });
    // Send the request including the text map and wait for the response.
  }
}

Example of usage in the server:

private final Tracer tracer = openTelemetry.getTracer("com.example");
void onRequestReceived() {
  ContextPropagators propagators = openTelemetry.getPropagators();
  TextMapPropagator textMapPropagator = propagators.getTextMapPropagator();

  // Extract and store the propagated span's SpanContext and other available concerns
  // in the specified Context.
  Context context = textMapPropagator.extract(Context.current(), request,
    new Getter<String, String>() {
      public String get(Object request, String key) {
        // Return the value associated to the key, if available.
      }
    }
  );
  Span span = tracer.spanBuilder("MyRequest")
      .setParent(context)
      .setSpanKind(SpanKind.SERVER).startSpan();
  try (Scope ignored = span.makeCurrent()) {
    // Handle request and send response back.
  } finally {
    span.end();
  }
}

Method Summary

Modifier and TypeMethod and Description
public static ContextPropagators
create(TextMapPropagator textPropagator)

Returns a ContextPropagators which can be used to extract and inject context in text payloads with the given TextMapPropagator.

public TextMapPropagator

Returns:

the TextMapPropagator propagator to inject and extract data.
getTextMapPropagator
()

Returns a TextMapPropagator propagator.

public static ContextPropagators
noop()

Returns a ContextPropagators which performs no injection or extraction.

Method Detail

createback to summary
public static ContextPropagators create(TextMapPropagator textPropagator)

Returns a ContextPropagators which can be used to extract and inject context in text payloads with the given TextMapPropagator. Use TextMapPropagator#composite(TextMapPropagator...) to register multiple propagators, which will all be executed when extracting or injecting.

ContextPropagators propagators = ContextPropagators.create(
  TextMapPropagator.composite(
    HttpTraceContext.getInstance(),
    W3CBaggagePropagator.getInstance(),
    new MyCustomContextPropagator()));
getTextMapPropagatorback to summary
public TextMapPropagator getTextMapPropagator()

Returns a TextMapPropagator propagator.

The returned value will be a composite instance containing all the registered TextMapPropagator propagators. If none is registered, the returned value will be a no-op instance.

Returns:TextMapPropagator

the TextMapPropagator propagator to inject and extract data.

noopback to summary
public static ContextPropagators noop()

Returns a ContextPropagators which performs no injection or extraction.