OTEL Baggage. Golang
b, _ := baggage.NewMember("key", "value")
bag, _ := baggage.New(b)
ctx = baggage.ContextWithBaggage(ctx, bag)
Исходный контекст в этом примере мог быть создан например при старте нового span’а. И если потом сделать его Inject то он передастся как http заголовок:
otel.GetTextMapPropagator().Inject(ctx, propagation.HeaderCarrier(w.Header()))
Извлечение пришедшей таким образом информации:
ctx := otel.GetTextMapPropagator().Extract(r.Context(), propagation.HeaderCarrier(r.Header))
bag := baggage.FromContext(ctx)
_, span := tracer.Start(ctx, "second")
defer span.End()
fmt.Println(bag.Member("key").Value())
TextMapPropogator
Важно при объявлении
TextMapPropogator
использовать композитный “пропогатор” и добавить к стандартной TraceContext так же Baggage:otel.SetTextMapPropagator(propagation.NewCompositeTextMapPropagator(propagation.TraceContext{}, propagation.Baggage{}))