Я новичок в Jaeger и хотел бы знать, могу ли я отследить сквозную транзакцию с родительским диапазоном и дочерними, подобными описанному ниже, с опросом из дочерних компонентов (без прямого вызова от родительского к дочернему) и обратный вызов от дочерних элементов к родительскому компоненту.
Контекст:
Сначала опишем в упрощенном виде то, что я хотел бы сделать. Решение, состоящее из нескольких компонентов, предоставляет REST API для отправки транзакций. Он синхронно возвращает идентификатор транзакции после вызова и выполняет обратный вызов вызывающей стороне после завершения или сбоя транзакции. Итак, я хочу отследить общую транзакцию от 1 до 3:
- invoker вызывает решение REST API с входными параметрами транзакции и URL-адресом обратного вызова
- invoker получает идентификатор из ответа REST API
- решение вызывает URL-адрес обратного вызова вызывающего с этим идентификатором
Под капотом:
- компонент (C1), предоставляющий REST API для отправки транзакции, выполнит некоторые действия, а затем поместит транзакцию в очередь. Это родительский компонент, о котором я упоминал выше.
- второй компонент (C2) будет опрашивать C1 с помощью внутреннего REST API для извлечения транзакции из очереди, а затем вызывать REST API, предоставляемый третьим компонентом (C3), для дальнейшего выполнения действий, связанных с транзакцией. В сообщении C1 передает URL-адрес обратного вызова, который затем передается C2 на C3.
- третий компонент (C3) проинформирует C1 о том, что он начинает обработку транзакции, вызывая переданный обратный вызов C1 с IN-PROGRESS
- а затем C3 организует множество действий, вызывающих синхронно (запрос ‹-> ответ) или асинхронно (запрос ‹-> ответ и затем ‹-callback) различные другие компоненты
- Когда все действия завершены успешно или когда одно из них завершается неудачей с неисправимой ошибкой, то компонент C3 снова обратится к C1, чтобы указать УСПЕХ или ОТКАЗ.
- Когда C1 вызывается C3, он затем выполняет некоторые закрывающие действия и вызывает обратный вызов инициатора транзакции.
Я предполагаю, что с помощью Jaeger можно будет отследить всю транзакцию, но вот мои вопросы: Вопрос:
- Q1: Я прав? :-)
- Q2: Как передать / распространить родительский диапазон, созданный в C1 на C2? (между шагом 1 и 2). Думаю добавить SpanContext на карту в качестве нового атрибута транзакции?
- Q3: Предполагая, что C2 получил диапазон, он может распространить его на C3, и поскольку C3 будет несколько раз вызывать обратный вызов C1 (шаги 3 и 5), как связать вызов этих обратных вызовов в C1 с родительским диапазоном?
Любые подсказки и подсказки будут приветствоваться. Спасибо.