красиво, но когда нужно прокидывать атомарную запись между сервисами, то начинаются дикие проблемы
Пример архитектуры:
Есть модуль покупок (купить вещь за такую-то сумму) и модуль транзакций (перевод денег от пользователю пользователю)
Задача:
Провести какие-то бизнесовые действия в модуле покупок и перевести нужную сумму с помощью сервиса транзакций _атомарно_
Вопрос:
Как?
Делай это в рамках одного сервиса, не надо разносить по разным сервисам то, что должно выполняться атомарно.
У меня есть в сервисе транзакций бизнесовая логика (проверить тип транзакции, сумму, наличие денег у пользователя). Не буду же я это копипастить везде
Вынеси это в логику доменного уровня и используй в сервисном слое.
https://t.me/gogolang/503601 уже не раз задавали же подобный вопрос
У меня в сервисе транзакций еще и ивент в рэббит валится после коммита в базу. Но если делать такую архитектуру, то ивент будет валиться до записи в бд. Там даже роллбек может случиться
Обсуждают сегодня