Sistema de reserva de viajes usando Spring Boot y Temporal.io
Este proyecto es una demo de un sistema de reservas de viajes que utiliza Spring Boot y Temporal para la orquestación de flujos de trabajo distribuidos y gestión de compensaciones (sagas). Permite reservar vuelos, hoteles y transporte, y soporta confirmación/cancelación por parte del usuario.
- Orquestación de actividades de reserva (vuelo, hotel, transporte) usando Temporal Workflow.
- Compensación automática en caso de fallo en alguna actividad.
- Confirmación de reserva mediante señal del usuario.
- Integración con Spring Boot y API REST para iniciar y confirmar reservas.
- Ejemplo de integración con servicios externos simulados (REST, gRPC, Kafka).
src/main/java/com/javatechie/activities: Interfaces e implementaciones de actividades de reserva.src/main/java/com/javatechie/dto: DTOs para solicitudes de viaje.src/main/java/com/javatechie/workflow: Definición e implementación del workflow de viaje.src/main/java/com/javatechie/starter: Clase para iniciar workflows y enviar señales.src/main/java/com/javatechie/controller: Controlador REST para exponer endpoints de reserva y confirmación.src/main/java/com/javatechie/config: Configuración de Temporal y workers.src/main/resources/application.properties: Configuración de la aplicación.docker-compose.yml: Stack para levantar Temporal y PostgreSQL localmente.
- Java 21+
- Docker y Docker Compose
- Maven
-
Levanta Temporal y PostgreSQL:
docker-compose up -d
-
Compila y ejecuta la aplicación:
mvn clean package mvn spring-boot:run
-
Accede a Temporal UI:
http://localhost:8088
POST /travel/book
Body:
{
"userId": "usuario1",
"destination": "Madrid",
"travelDate": "2024-07-01"
}POST /travel/confirm/{userId}
Parámetro:
userId: ID del usuario que confirma la reserva.
- El workflow implementa una saga: si alguna actividad falla, se ejecutan las compensaciones correspondientes.
- Si el usuario no confirma la reserva en 2 minutos, la reserva se cancela automáticamente.
- Las actividades simulan integración con servicios externos y pueden lanzar excepciones para probar la compensación.
Demo creada por javatechie y adaptada para propósitos educativos.
¿Quieres saber más sobre cómo funciona cada parte? Consulta los archivos fuente principales: