@Immutable
public class TraceMultiPropagator
extends java.lang.Object
implements io.opentelemetry.context.propagation.TextMapPropagator
TextMapPropagator
propagators,
intended for backwards compatibility with existing services using different formats. It works in
a stack-fashion, starting with the last registered propagator, to the first one.
The propagation fields retrieved from all registered propagators are de-duplicated.
Upon injection, this propagator invokes TextMapPropagator#inject()
for every
registered trace propagator. This will result in the carrier containing all the registered
formats.
Upon extraction, this propagator invokes TextMapPropagator#extract()
for every
registered trace propagator, returning immediately when a successful extraction happened.
TextMapPropagator traceFormats = TraceMultiPropagator.builder()
.addPropagator(new MyCustomTracePropagator())
.addPropagator(new JaegerPropagator())
.addPropagator(new HttpTraceContext())
.build();
// Register it in the global propagators:
OpenTelemetry.setPropagators(
DefaultContextPropagators.builder()
.addTextMapPropagator(traceFormats)
.build());
...
// Extraction will be performed in reverse order, i.e. starting with the last
// registered propagator (HttpTraceContext in this example).
Context context = OpenTelemetry.getPropagators().getTextMapPropagator()
.extract(context, carrier, carrierGetter);
Modifier and Type | Class and Description |
---|---|
static class |
TraceMultiPropagator.Builder
TraceMultiPropagator.Builder is used to construct a new TraceMultiPropagator object with the
specified propagators. |
Modifier and Type | Method and Description |
---|---|
static TraceMultiPropagator.Builder |
builder()
Returns a
TraceMultiPropagator.Builder to create a new TraceMultiPropagator
object. |
<C> io.grpc.Context |
extract(io.grpc.Context context,
C carrier,
io.opentelemetry.context.propagation.TextMapPropagator.Getter<C> getter)
Extracts the value from upstream invoking all the registered propagators, starting with the
last one.
|
java.util.List<java.lang.String> |
fields()
The propagation fields defined in all the registered propagators.
|
<C> void |
inject(io.grpc.Context context,
C carrier,
io.opentelemetry.context.propagation.TextMapPropagator.Setter<C> setter)
Injects the value downstream invoking all the registered propagators, starting with the last
one.
|
public static TraceMultiPropagator.Builder builder()
TraceMultiPropagator.Builder
to create a new TraceMultiPropagator
object.TraceMultiPropagator.Builder
.public java.util.List<java.lang.String> fields()
fields
in interface io.opentelemetry.context.propagation.TextMapPropagator
public <C> void inject(io.grpc.Context context, C carrier, io.opentelemetry.context.propagation.TextMapPropagator.Setter<C> setter)
inject
in interface io.opentelemetry.context.propagation.TextMapPropagator
C
- carrier of propagation fields, such as an http requestcontext
- the Context
containing the value to be injected.carrier
- holds propagation fields. For example, an outgoing message or http request.setter
- invoked for each propagation key to add or remove.public <C> io.grpc.Context extract(io.grpc.Context context, C carrier, io.opentelemetry.context.propagation.TextMapPropagator.Getter<C> getter)
extract
in interface io.opentelemetry.context.propagation.TextMapPropagator
C
- carrier of propagation fields, such as an http request.context
- the Context
used to store the extracted value.carrier
- holds propagation fields. For example, an outgoing message or http request.getter
- invoked for each propagation key to get.Context
containing the extracted value.