Script de inicialización que configura la topología de RabbitMQ para Riff. Crea el exchange centralizado riff_events, las colas duraderas y sus bindings automáticamente. Se ejecuta una única vez al iniciar la infraestructura antes de levantar los microservicios.
En una arquitectura de microservicios orientada por eventos, la topología de RabbitMQ (exchanges, queues, bindings) no debe configurarse manualmente en cada servicio. Esto genera inconsistencias, dificulta la depuración y afecta la escalabilidad. rabbit-setup garantiza que la topología sea idempotente, centralizada y reproducible en cualquier entorno.
- Crear el exchange
riff_eventscomo topic exchange durable. - Crear colas duraderas para cada microservicio.
- Configurar bindings entre el exchange y las colas.
- Reintentar conexión con backoff exponencial si RabbitMQ no está listo.
- Fallar rápidamente si la configuración no se puede completar.
docker-compose up -> RabbitMQ container starts
rabbit-setup starts (init container)
- Connect to RabbitMQ (with retry)
- Create exchange (riff_events, topic, durable)
- Create queues (durable):
- notifications_queue
- content_queue
- users_queue
- Bind queues to exchange with routing keys
Una vez completada, la topología está lista para que los microservicios se conecten y comiencen a producir/consumir eventos.
- Tipo: Topic (permite pattern matching)
- Durable: Sí (persiste si RabbitMQ reinicia)
| Queue | Bindings |
|---|---|
notifications_queue |
auth.tokenGenerated, post.created, event.*, send.resetPassword, follow.* |
content_queue |
auth.tokenGenerated, post.created, event.created, event.updated, event.cancelled, follow.* |
users_queue |
user.*, auth.tokenGenerated |
Cada cola está configurada como durable, permitiendo persistencia si los consumidores están caídos.
- Topic Exchange: Permite que los productores publiquen con routing keys específicas y los consumidores se suscriban a patrones (ej:
event.*capturaevent.created,event.updated, etc). - Queues Duraderas: Garantiza que eventos no se pierdan si los microservicios están caídos.
- Retry con Backoff Exponencial: Si RabbitMQ no está listo, el script reintenta con delays crecientes (2s, 4s, 8s... hasta 30s máximo) en lugar de fallar inmediatamente.
- Idempotente: Si los queues/exchanges ya existen, el script simplemente verifica que estén correctamente configurados sin errores.
- Node.js 16+
- RabbitMQ corriendo (via Docker)
npm install# Asegúrate de que RabbitMQ esté corriendo primero
RABBIT_URL=amqp://guest:guest@localhost:5672 npm startRABBIT_URL=amqp://usuario:password@host:5672
RABBIT_SETUP_MAX_ATTEMPTS=8 # Máximo de reintentos (default: 8)
RABBIT_SETUP_INITIAL_DELAY=2000 # Delay inicial en ms (default: 2000)Este script es la pieza fundamental de inicialización para toda la arquitectura de eventos de Riff. Sin él, los microservicios tendrían que crear sus propias colas y bindings (acoplamiento), o la topología sería manual y frágil. rabbit-setup garantiza que:
- La topología es reproducible en cualquier entorno (local, staging, production).
- Los microservicios solo deben preocuparse por consumir o producir eventos, no por configurar infraestructura.
- Los eventos persisten aunque los servicios estén caídos (no se pierden).
- El sistema escala: agregar nuevos servicios es tan fácil como actualizar
QUEUESensetup.jsy redesplegando.