Este proyecto implementa un sistema robusto y escalable de colas de tareas (Background Jobs) utilizando PostgreSQL como backbone y Graphile Worker para el procesamiento. Desarrollado con Bun para maximizar el rendimiento y la velocidad de ejecución.
El sistema está diseñado para manejar altas cargas de trabajo, garantizando la persistencia, reintentos automáticos y monitoreo en tiempo real de las tareas.
- Alto Rendimiento: Construido sobre el runtime Bun.
- Persistencia Confiable: Uso de PostgreSQL para asegurar que ningun trabajo se pierda.
- Escalabilidad: Arquitectura lista para desplegar workers distribuidos.
- Monitoreo en Tiempo Real: Scripts incluidos para observar el estado de la cola y métricas de procesamiento.
- Pruebas de Estrés: Herramientas integradas para simular cargas masivas y verificar estabilidad.
- Runtime: Bun
- Base de Datos: PostgreSQL
- Server: Express
- Queue Engine: Graphile Worker
- Validación: Zod
- Bun (v1.0+)
- PostgreSQL
git clone <tu-repo>
cd queue-postgresqlbun installCopia el archivo de ejemplo y configura tu conexión a base de datos:
cp .env.example .envAsegúrate de configurar DATABASE_URL y otras variables según tu entorno.
Inicia la API principal:
bun run devInicia el proceso de worker para consumir las tareas:
bun run worker:devEl proyecto incluye una suite de scripts automatizados ubicados en la carpeta scripts/ para pruebas y mantenimiento.
Ejecuta una carga constante de trabajos para evaluar el rendimiento:
# Test de estrés estándar
bun run test:stress:const
# Test específico (1000 jobs, concurrencia 3)
bun run test:stress:5000Para validar el despliegue en un entorno de nube:
bun run cloud:stressVigila el estado de la cola en tiempo real (Jobs pendientes, fallidos, completados):
bun run queue:watchqueue-postgresql/
├── 📂 scripts/ # Scripts de utilidad y testing
│ ├── cloud-stress-test.ts
│ ├── queue-stats-watch.ts
│ └── test-queue.ts
├── 📂 src/ # Código fuente principal
│ ├── app.ts # Entry point de la API
│ ├── worker.ts # Entry point del Worker
│ └── ...
├── 📂 resources/ # Assets y recursos estáticos
├── package.json
└── README.md
Las contribuciones son bienvenidas. Por favor, abre un issue o envía un PR para mejoras.
