Проблема транзакции, когда DB Call происходит после Rest Call - PullRequest
0 голосов
/ 25 апреля 2020

Я использую Spring Boot и мое приложение сейчас только Monolithi c , может переключиться на микросервисы позже.

СЦЕНАРИЙ 1: Здесь мой вызов БД НЕ зависит от ответа REST

@Transactional
class MyService {

    public void DBCallNotDependsOnRESTResponse(){

        //DB Call
        //REST Call, This restcall gives response like 200 "successfull"
    }
}

СЦЕНАРИЙ 2: Здесь мой вызов БД зависит от ответа REST

@Transactional
class MyService {

    public void DBCallDependsOnRESTResponse(){

        //REST Call, making a Real Transaction using BrainTree
        //DB Call, HERE DB CALL DEPENDS ON REST RESPONSE
    }
}

В случае Сценария 1 у меня нет проблем, так как DB откатывается в случае сбоя REST.

НО, в случае Сценария 2, вызов REST не может быть откат, в случае любого исключения происходит при вызове БД.

Я уже искал в google выше, я нашел некоторые решения, например, нам нужно использовать что-то вроде модели системы Pub-Sub, но я не смог получить эту концепцию моя голова ясно.

Я буду рад, если кто-то сможет предоставить решение для СЦЕНАРИИ 2. Как другие предприятия электронной коммерции эффективно обрабатывают свои транзакции, я думаю, мой запрос связан с некоторым архитектурным дизайном .. Пожалуйста, совет какая-то хорошая архитектура Повторный подход к решению вышеуказанной проблемы сделки. Как вы думаете, использование какой-либо системы обмена сообщениями, такой как Kafka, решит вышеуказанную проблему? К вашему сведению, в настоящее время мое приложение Monolithi c, я буду использовать Microservices? Нужно ли использовать двухфазный коммит или Sagas решит мою проблему? Можно ли использовать Sagas для приложения Monolithi c?

РЕДАКТИРОВАТЬ: Относительно RestCall : На самом деле я делаю реальную транзакцию с использованием BrainTree, которое Вызов отдыха.

1 Ответ

0 голосов
/ 25 апреля 2020

Можете ли вы уточнить, чего вы добиваетесь от вызова покоя? Обновляете ли вы какие-либо данные, которые будут использоваться вызовом БД?

Если 2 вызова независимы, будет ли важен порядок? Поскольку вызов БД будет зафиксирован в конце самого метода

...