Mikroservislərdə paylanmış (distributed) tranzaksiyaları idarə edir: bir addım uğursuz olarsa, əvvəlkilər geri qaytarılır (Compensating Transaction).
Mikroservislər ayrı bazalara sahibdir, buna görə 2PC (Two-Phase Commit) istifadə etmək mümkün deyil. Saga bunun alternatividir.
Orchestration: Mərkəzi koordinator (Saga Orchestrator) hər addımı idarə edir. Choreography: Hər servis özü növbəti addımı tetikləyir.
Axon Framework, Eventuate Tram, MicroProfile LRA, Camunda, Temporal.
@Service
public class OrderSagaOrchestrator {
public void executeSaga(OrderRequest order) {
try {
// Addım 1: Pulu çıx
paymentService.charge(order);
// Addım 2: Anbardan ayır
inventoryService.reserve(order);
// Addım 3: Kuryer çağır
shippingService.dispatch(order);
} catch (InventoryException e) {
// Anbar xətası → Pulu geri qaytar (Compensation)
paymentService.refund(order);
throw new SagaFailedException("Anbar xətası, pul geri qaytarıldı");
} catch (ShippingException e) {
// Çatdırılma xətası → Anbarı azad et + Pulu qaytar
inventoryService.release(order);
paymentService.refund(order);
throw new SagaFailedException("Çatdırılma xətası, hamısı geri qaytarıldı");
}
}
}