Нам необходимо найти лучший способ решения проблем управления распределенными транзакциями в нашей архитектуре микросервисов.
Вот постановка задачи.
У нас есть один микросервис Composite, который должен взаимодействовать с другими 2-мя атомными микросервисами (которые явно предназначены для конкретной цели) и иметь отдельную базу данных, например. Мы можем рассматривать эти 2 микросервиса как
- STUDENT_SERVICE (STU_DB)
- TEACHER_SERVICE (TEACHR_DB)
Здесь, в Composite Service Usecase, пользователь (Администратор) может назначить Учителя для ученика для определенного курса и т. Д.
Интересно, как мы можем решить эту проблему в одной транзакции, поскольку каждая служба (STUDENT_SERVICE и TEACHER_SERVICE) имеет отдельную БД, и все должно происходить в одной транзакции - либо фиксация, либо откат.
Поскольку эти 2 службы являются отдельными, и я вижу, что JTA не поможет, поскольку он предназначен для развертывания этих 2 приложений (служб) на одном сервере приложений!
Я отказался от JTAкак упомянуто выше // Класс псевдо-кода CompositeService {
AssignStaff(resquest){
//txn Start
updateStudentServiceAPI(request);
UpdateTeacherServiceAPI(request);
//txn End
}
}
Система должна быть в согласованном состоянии после выполнения API