The carrier of propagated data on both the client (injector) and server (extractor) side is usually an http request. Propagation is usually implemented via library- specific request interceptors, where the client-side injects values and the server-side extracts them.
Specific concern values (traces, correlations, etc) will be read from the specified Context, and resulting values will be stored in a new Context upon extraction. It is
recommended to use a single Context.Key to store the entire concern data:
public static final Context.Key CONCERN_KEY = Context.key("my-concern-key");
public MyConcernPropagator implements TextMapPropagator {
public <C> void inject(Context context, C carrier, Setter<C> setter) {
Object concern = CONCERN_KEY.get(context);
// Use concern in the specified context to propagate data.
}
public <C> Context extract(Context context, C carrier, Getter<C> getter) {
// Use getter to get the data from the carrier.
return context.withValue(CONCERN_KEY, concern);
}
}
| Modifier and Type | Method and Description |
|---|---|
| public static TextMapPropagator | composite(TextMapPropagator... propagators)
Returns a |
| public static TextMapPropagator | composite(Iterable<TextMapPropagator> propagators)
Returns a |
| public < the type of carrier of the propagation fields, such as an http request. C> Context | Returns: theContext containing the extracted data.the context, C Context used to store the extracted value.holds propagation fields. For example, an outgoing message or http request. carrier, TextMapGetter<C> invoked for each propagation key to get data from the carrier. getter)Extracts data from upstream. |
| public Collection | |
| public < carrier of propagation fields, such as an http request C> void | inject(Context
the context, C Context containing the value to be injected.holds propagation fields. For example, an outgoing message or http request. carrier, TextMapSetter<C> invoked for each propagation key to add or remove. setter)Injects data for downstream consumers, for example as HTTP headers. |
| public static TextMapPropagator |
| composite | back to summary |
|---|---|
| public static TextMapPropagator composite(TextMapPropagator... propagators) Returns a Invocation order of | |
| composite | back to summary |
|---|---|
| public static TextMapPropagator composite(Iterable<TextMapPropagator> propagators) Returns a Invocation order of | |
| extract | back to summary |
|---|---|
| public <C> Context extract(Context context, C carrier, TextMapGetter<C> getter) Extracts data from upstream. For example, from incoming http headers. The returned Context should contain the extracted data, if any, merged with the data from the passed-in Context. If the incoming information could not be parsed, implementations MUST return the original Context, unaltered.
| |
| fields | back to summary |
|---|---|
| public Collection The propagation fields defined. If your carrier is reused, you should delete the fields here
before calling For example, if the carrier is a single-use or immutable request object, you don't need to clear fields as they couldn't have been set before. If it is a mutable, retryable object, successive calls should clear these fields first. Some use cases for this are:
| |
| inject | back to summary |
|---|---|
| public <C> void inject(Context context, C carrier, TextMapSetter<C> setter) Injects data for downstream consumers, for example as HTTP headers. The carrier may be null to
facilitate calling this method with a lambda for the
| |
| noop | back to summary |
|---|---|
| public static TextMapPropagator noop() Returns a | |