Обмен данными между двумя микросервисами

Обмен данными между двумя микросервисами
Обмен данными между двумя микросервисами - growtika @ Unsplash

Для такого рода требований будет лучше, если клиент будет получать промежуточный ответ, а не возвращать окончательный ответ. Чтобы это работало, я бы сделал так, чтобы запрос клиента обрабатывался асинхронно.

Проще говоря, служба A и служба B действуют как потребители, прослушивающие очереди QueueA и QueueB соответственно на службе брокера сообщений (ActiveMQ, RabitMQ и т.д.) Будет еще одна служба, называемая API службой, которая прослушивает запросы клиентов. Этот сервис также будет иметь свою собственную БД, поддерживающую статус задач (API БД). Служба A и служба B также будут иметь доступ к DB API.

При такой схеме вот как обрабатывается запрос, когда он отправлен клиентом:

  1. API Service создаст идентификатор задачи в DB API. Статус задачи будет In Progress. Затем он отправит запрос на QueueA. Идентификатор задачи будет получен в качестве немедленного ответа.
  2. Служба A потребляет сообщение, обрабатывает его. Если запрос успешно обработан, задание пересылается QueueB. Он обновит API БД в соответствии с идентификатором задания.
  3. Служба B, слушающая QueueB, потребляет сообщение и обрабатывает его. В случае неудачи, информация о неудаче обновляется в DB API в соответствии с ID задачи в DB API как окончательный результат.

На основании обновлений задания, выполненных службами A и B, статус задания будет либо Done, либо Error. Клиент, который опрашивает о завершении задания, получит окончательный результат в качестве ответа.

Рекомендую посмотреть эти видео для лучшего погружения в вопрос:

Прикрепленное видео 1 - Микросервисы. Взаимодействие между сервисами (Теория)

Прикрепленное видео 2 - ЭТОТ ПАТТЕРН ВЕЗДЕ! БАЗЫ ДАННЫХ В МИКРОСЕРВИСАХ


LetsCodeIt, 28 февраля 2023 г., 17:58