Светодиоды
0
Вклад в тег
//достаем текстового распространителя
var textMapPropagator = Propagators.DefaultTextMapPropagator;
//формируем контекст распространения
var propContext = new OpenTelemetry.Context.Propagation.PropagationContext(Activity.Current.Context, Baggage.Current);
//этот метод вызывает для каждого необходимого значения их контекста распространения ваш же метод, который сохраняет пару ключ-значения для последующего восстановления
textMapPropagator.Inject(propContext,context, (ctx, name, val) =>
{
ctx.Headers.Set(name,val);
});
//извлекаем из среды распространяемую трейс-информацию
var propagator = Propagators.DefaultTextMapPropagator;
PropagationContext propagationContext = propagator.Extract(default, context,
(ctx, name) => { return new string[] { ctx.Headers.Get<string>(name) }; });
if (propagationContext.ActivityContext.IsValid())
{
//формируем новый спан.
newOne = new Activity("Consumer");
newOne.SetParentId(propagationContext.ActivityContext.TraceId,
propagationContext.ActivityContext.SpanId,
propagationContext.ActivityContext.TraceFlags);
newOne.TraceStateString = propagationContext.ActivityContext.TraceState;
newOne.Start();
newOne.IsAllDataRequested = false;
Baggage.Current = propagationContext.Baggage;
}