Я использую 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, которое Вызов отдыха.