Весеннее облачное наследие: запускаемые вручную асинхронные сервисы
У меня есть служба A, которая создает электронное письмо и отправляет его клиенту. Клиент получит электронное письмо и, в конце концов, щелкнет ссылку в теле, чтобы вызвать службу B.
Как я могу соотнести две разные и полностью изолированные службы, которые являются частью одного и того же бизнес-процесса, с сыновней?
Должен ли я оставить диапазон "открытым" или есть способ как-то "вставить" идентификатор трассировки в электронное письмо?
1 ответ
Вы можете использовать асинхронную связь ( http://cloud.spring.io/spring-cloud-sleuth/spring-cloud-sleuth.html), например, через представление трассировки ExecutorService
называется TraceableExecutorService
( http://cloud.spring.io/spring-cloud-sleuth/spring-cloud-sleuth.html). Вы создаете полное будущее, которое будет обрабатывать данные в отдельном потоке. В какой-то момент вы блокируете, а затем вы можете получить данные. Трассировка представления ExecutorService
позаботится о передаче данных трассировки.
ОБНОВЛЕНИЕ: Если, однако, это полностью два отдельных процесса, я бы закрыл промежуток и создал бы совершенно отдельный промежуток в тот момент, когда кто-то нажимает на ссылку. Вы никогда не должны оставлять промежутки явно открытыми. То, что связывает 2 процесса, будет идентификатором трассировки. Zipkin пока не поддерживает эти долгоживущие задачи наилучшим образом с точки зрения пользовательского интерфейса, но продолжается работа по его улучшению (с помощью так называемых связанных промежутков)