Вы можете передать Идентификатор обратно клиенту после завершения бронирования, и клиент может использовать этот идентификатор для запроса статуса последующих действий, если вы можете подключить их на серверной части.Вы также можете отправить уведомление клиенту, когда другие события будут завершены.Вы можете сделать длинный опрос или сделать уведомление.
благодаря skjagini.часть моего вопроса - разобраться со случаем, когда другие микросервисы не возвращаются вовремя или никогда.Допустим, платежный API завершен, работает и взимает плату с клиента, но не уведомил мою службу заказов вовремя или через очень долгое время.как мой клиент ждет?если мы истечем время ожидания клиента, бэкэнд мог обработать его после истечения времени ожидания
В CQRS вы должны разделить команды и запросы.То есть, учитывая ваш сценарий, вы можете реализовать все взаимодействия с очередями для взаимодействия.(Существует несколько реализаций для CQRS с источником событий, но в простейшей форме):
Клиент отправляет запрос -> Платежный API получает запрос -> Подтверждает запрос (если проверка не пройдена, ошибка возвращается кuser) -> При успешной проверке -> генерирует GUID и записывает запрос сообщения в очередь -> передает GUID пользователю
Payment API подписывает очередь платежей -> После обработки запроса --> записывает в очередь заказов или любые другие очереди
Заказ APi подписывается на очередь заказов и обрабатывает запрос.
У пользователя есть GUID, который может получить его данные для всех взаимодействий.
Если использовать паб / саб, как в Kafka вместо Kafka (все последующие системы могут читать из той же темы,вам не нужно писать для каждой очереди)
Если какая-либо из служб не может быть обработана, после перезапуска служб она сможет выбрать, где они остановились, если службы находятся в серединетранзакции, пока они откатывают свои изменения, ваша система должна быть стабильной