Skip to content

ОтелКомпозитныйПропагатор ​

Композитный пропагатор (CompositePropagator) по спецификации OpenTelemetry.

Описание ​

Объединяет несколько пропагаторов в единую цепочку. Позволяет одновременно использовать, например, ОтелW3CПропагатор и ОтелW3CBaggageПропагатор.

  • Внедрить() — вызывает все пропагаторы последовательно
  • Извлечь() — цепочечно передаёт контекст через все пропагаторы
  • Поля() — возвращает объединённый список заголовков всех пропагаторов

Ошибки отдельного пропагатора не прерывают выполнение цепочки: они записываются в лог как предупреждения и обработка продолжается со следующим пропагатором.

Конструктор ​

bsl
Новый ОтелКомпозитныйПропагатор(Пропагаторы)
ПараметрТипПо умолчаниюОписание
ПропагаторыМассив—Массив объектов-пропагаторов

Методы ​

Внедрить ​

Внедряет контекст через все пропагаторы последовательно.

ПараметрТипПо умолчаниюОписание
КонтекстПроизвольный—Контекст для внедрения (Спан, Baggage и т.д.)
НосительПроизвольный—Носитель заголовков
СеттерОтелСеттерТекстовойКартыНеопределеноОбъект для записи в носитель (по умолчанию для Соответствие)

Извлечь ​

Извлекает контекст из заголовков через все пропагаторы последовательно. Каждый пропагатор получает контекст, обогащённый предыдущим.

ПараметрТипПо умолчаниюОписание
КонтекстСоответствие—Входной OTel Context
НосительПроизвольный—Носитель заголовков
ГеттерОтелГеттерТекстовойКартыНеопределеноОбъект для чтения из носителя (по умолчанию для Соответствие)

Возвращает: Соответствие — контекст, обогащённый данными от всех пропагаторов

Поля ​

Возвращает объединённый список заголовков всех пропагаторов.

Возвращает: Массив из Строка — список имён полей заголовков

Пример ​

bsl
#Использовать opentelemetry

// Объединить W3C TraceContext и Baggage пропагаторы
Список = Новый Массив();
Список.Добавить(Новый ОтелW3CПропагатор());
Список.Добавить(Новый ОтелW3CBaggageПропагатор());

КомпПропагатор = Новый ОтелКомпозитныйПропагатор(Список);

// Внедрить все данные в заголовки
Заголовки = Новый Соответствие();
КомпПропагатор.Внедрить(ОтелКонтекст.Текущий(), Заголовки);
// Заголовки содержит traceparent, tracestate и baggage

// Извлечь все данные из входящих заголовков (здесь — из только что заполненных)
ВходящиеЗаголовки = Заголовки;
НовыйКонтекст = КомпПропагатор.Извлечь(Новый Соответствие(), ВходящиеЗаголовки);

// Получить все используемые поля
Поля = КомпПропагатор.Поля();
// ["traceparent", "tracestate", "baggage"]