Отслеживание потока данных в распределенных / устаревших системах - PullRequest
0 голосов
/ 25 октября 2019

У меня есть 2 микросервиса [A, B], а сервис [B] интегрирован с устаревшей системой [C]. Служба [B] обычно генерирует уникальный идентификатор и включает его в поток в [C], а также передает его обратно в [A]. Таким образом, согласование осуществлялось между системами.

Проблема действительно началась, когда существует потребность в услуге [D], которую [A] должен вызывать параллельно, чтобы сообщить [C].

Хотя имеет смысл иметь [A] генерировать уникальный идентификатор и отправлять его как [B], так и [D] для решения проблемы, это не так просто из-за стоимости изменений в [С]. Таким образом, нам все равно нужно иметь уникальный идентификатор [B], доступный для [D], для объединения данных в [C].

Спасибо, если кто-то может мне помочь, если есть тактический шаблон для решения этой проблемы.

1 Ответ

0 голосов
/ 28 октября 2019

Немного сложно следить за всеми услугами без диаграммы, но я сделаю все возможное. Вы говорите, что C передает идентификатор обратно в текущем процессе, поэтому я предполагаю, что эта структура вызова

A -> B (create ID) -> C -> A

Теперь вы хотите ввести

A -> D -> C -> A

И вам нужен Cзнать, какое сообщение из пути ADC связано с каким сообщением из пути ABC. Это правильно?

Лучшее решение - позволить A создать идентификатор для всех, например:

A (Create ID) -> B (use ID given by A) -> C -> A
A (Use same ID) -> D -> C -> A

Если вы не можете изменить код для создания одного идентификатора в Aсервис, попробуйте 2 разных идентификатора сообщения. Это было бы неуклюже, так как вам нужно где-то хранилище, чтобы вы могли сказать, что msg123 поступает из того же источника, что и msgABC, но это решит проблему.

Это даст вам

A -> B (create ID1) -> C -> A
A (Create ID2) -> D -> C -> A
...