170 похожих чатов

Всем привет! Есть вопрос по хореографической оркестрации микросервисов и паттерне

сага.

Допустим у меня есть 3 микросервиса order, payment, notification. Веб клиент делает http запрос POST /orders и пытается создать заказ и у него триггерится цепочка ивентов. В примере по сагам https://microservices.io/patterns/data/saga.html я вижу, что они предлагают создать заказ со статусом PENDING и когда цепочка ивентов закончится и вся бизнес логика выполнится менять статус заказа на COMPLETED это и будет означать, что запрос выполнился успешно. Но получается, что после того как клиент сделает POST запрос, ему order микросервис сразу вернет ответ с текущим статусом PENDING и параллельно запустить первый ивент и тогда клиент сразу не узнает, есть ли какие-то проблемы перед созданием заказа или нет. Только после обновления он сможет увидеть новый статус и причину ошибки, если такова будет. Интересует можно ли как-то обойти это и вернуть ответ клиенту сразу, когда цепочка ивентов закончится? Например, если payment сервис вернет ошибку недостаточно средств для создания заказа, хочется чтобы клиент сразу после нажатия кнопки создать заказ, после условного лоадера ему вернулась эта ошибка.

Какие варианты я рассмотривал:
1) Делать на клиенте поллинг. Как по мне так себе решение и фактически лишняя нагрузка на сервер.
2) Переделать все взаимодействия на вебсокеты и тогда по завершению цепочки ивентов, передает ивент в вебсокет с результатом обработки запроса. Тоже не особо вариант, потому что требует лишних усилий на фронте.
3) Делать какой-то поллинг на сервисе принявший запрос. Это скорей всего вообще может не сработать. Потому что допустим у нас кубик с репликами сервиса и у нас будет конечный ивент orders:created:success и тогда сервис, который принял запрос от клиента может не обработать конечный ивент, а например его подхватит другая реплика, где нет req клиента сделавший запрос

Заранее извиняюсь, если вопрос прозвучит как нубский, но спустя сутки гугления ничего отвечающий на мой вопрос я не нашел. Буду рад просто ссылкам на примеры или описание (необязательно на NodeJs, мне хватит просто понять смысл и идею)

Спасибо!

3 ответов

18 просмотров

@oop_ru

А в чём логика отдавать ответ клиенту до того, как будет известен результат обработки его запроса?

Что если при получении запроса держать его 30 секунд и в течение этого времени каждую секунду проверять статус заказа? У вас система разделена на микросервисы, как вы связываете их между собой? База у вас тоже разделена или монолитная?

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта