Muhamad Zununov@VanquisherWinbringer
CIO
Information
- Rating
- Does not participate
- Location
- Россия
- Registered
- Activity
Specialization
Технический директор, Директор по информационным технологиям
C#
Разработка программного обеспечения
Управление проектами
Управление продуктами
Управление разработкой
Agile
Scrum
Kanban
Разработка ТЗ
Scala
Она упадет, потом сделает ретрай. Там пока в БД не будет записано что обработчик выполнился и выполнено действие оно будет повторяться. Либо до достижения лимита ретраев.
Тут надо в ней поля добавить для количества предметов и суммы денег что она себе забрала.
Дальше записываем данные в эти поля и потом уже делаем запрос на возвращение денег и предметов обратно. Да, консистентность со временем.
Для важных процессов ретраев делается много и с большим нарастающим промежутком между ними. Кроме того, в логи пишется если все ретраи выполнены и процесс не удалось завершить (Fault) и уже такие случаи можно индивидуально рассмотреть. Вообще через Jaeger это все трейситься обычно.
Тут для простоты фронт ждет ответа. Обычно записывают в БД Id таска при постановке задачи и дальше при событии оповещающем о том что сага завершила свою работу выставляют данные этом Таске в БД и еще в SignalR пушим что таск завершился. Фронт может и сам тоже проверить сделав запрос завершился ли Таск и какой у него результат.
Оу, спасибо! Отличная статься. Сам давно использую умные кострукторы в том числе и в C# только там бросаю эксепшены в контсрукторе или в методе set свойства.
Так тестами можно было этот флоу описать. Что если вот так то должно делаться вот так. Если есть входные и выходные данные из логов то можно было реально с ними продебажить в специально созданном тесте — просто в моки и стабы данные нужные выставить и дебажить. Ну как тест — это уже просто экспериментальный запуск. Хотя там такое, я всего кода не вижу. Может там дофига внешнего взаимодействия и написать моки/стабы был бы дикий гемморой.