Skip to content

lg5-jvm-saga

Implementa el patrón Saga para transacciones distribuidas entre microservicios.


Propósito

Permite orquestar secuencias de operaciones que involucran múltiples servicios, con compensación automática si algo falla.


Arquitectura

Es puramente una interfaz Kotlin sin dependencias externas — diseñada para ser combinada con otros módulos como lg5-spring-kafka.


Dependency

kotlin
// lg5-jvm-saga/build.gradle.kts
// Sin dependencias externas - pure Kotlin interface

SagaStep Interface

kotlin
interface SagaStep<T> {
    fun process(data: T)    // Forward execution
    fun rollback(data: T)   // Compensation / rollback
}

Conceptos Clave

ConceptoDescripción
process(data)Ejecución forward (acción normal)
rollback(data)Compensación (acción inversa si falla)
TTipo genérico de datos que fluyen por la saga

Ejemplo de Uso

java
public class CreateOrderSaga implements SagaStep<OrderContext> {
    
    @Override
    public void process(OrderContext ctx) {
        orderRepo.create(ctx.getOrder());
        paymentService.charge(ctx.getPayment());
        inventoryService.reserve(ctx.getItems());
    }

    @Override
    public void rollback(OrderContext ctx) {
        inventoryService.release(ctx.getItems());
        paymentService.refund(ctx.getPayment());
        orderRepo.delete(ctx.getOrder().getId());
    }
}

Uso en tu Servicio

xml
<dependency>
    <groupId>com.lg5.jvm</groupId>
    <artifactId>lg5-jvm-saga</artifactId>
</dependency>

Released under the MIT License.