Plan d'Implémentation - Architecture Workers BullMQ
Date : 2026-01-24
Statut : 🚀 Prêt pour finalisation et déploiement
📊 État Actuel
✅ Ce qui est déjà implémenté
Infrastructure
- ✅ 4 Workers :
worker-export,worker-email,worker-ai,worker-doc - ✅ Migrations DB : 0152 (infrastructure) et 0153 (tables spécifiques)
- ✅ Services :
JobRunsService,FileObjectsService,OutboxService - ✅ WorkersQueueService : Service centralisé pour enqueueer les jobs
- ✅ Validation Zod : Tous les payloads validés
- ✅ Idempotence : JobId stable pour tous les jobs
- ✅ Modules intégrés : Tous les modules sont intégrés dans
ApiOpsModuleetWorkerModule
Processors
- ✅
ExportBuildProcessor: Traite les exports asynchrones - ✅
EmailSendProcessor: Envoi d'emails individuels - ✅
EmailSeqRunDueProcessor: Exécution des séquences d'emails - ✅
AiRunProcessor: Exécution de tâches IA - ✅
DocIngestProcessor: Ingestion de documents - ✅
DocOcrProcessor: OCR de documents (placeholder) - ✅
DocExtractStructuredProcessor: Extraction structurée
API
- ✅
JobRunsController: Endpoints pour polling status - ✅
ExportController.exportAsync(): Endpoint async pour exports - ✅ Intégration dans les services existants
Frontend
- ✅ Hooks React Query :
useJobRuns,useJobRun - ✅ Composants :
JobRunStatusBadge,JobRunProgress
⚠️ Actions requises immédiatement
-
Exécuter les migrations DB
npm run migrate- Vérifier que les tables
job_runs,outbox_events,file_objectssont créées - Vérifier que les tables
export_jobs,ai_tasks,documentssont créées
- Vérifier que les tables
-
Générer les types TypeScript
npm run generate:types- Vérifier que les types sont dans
database.types.ts - Supprimer les casts
as anytemporaires
- Vérifier que les types sont dans
-
Configuration environnement
- Vérifier
QUEUE_WORKERS_ENABLED=true - Vérifier les variables Redis et R2
- Vérifier
-
Test de démarrage
- Démarrer le backend en mode worker
- Vérifier que les workers démarrent sans erreur
🎯 Plan d'Action
Phase 1 : Finalisation (Aujourd'hui)
1.1 Vérifier l'état des migrations
# Vérifier si les migrations ont été exécutées
psql -d your_database -c "\dt job_runs export_jobs ai_tasks documents"
Actions :
- Si les tables n'existent pas → Exécuter
npm run migrate - Vérifier les indexes sont créés
- Vérifier les contraintes sont en place
1.2 Générer les types DB
# Générer les types depuis la DB
npm run generate:types
Actions :
- Vérifier que
job_runs,export_jobs,ai_tasks,documentssont dansdatabase.types.ts - Supprimer les casts
as anydans les services - Vérifier la compilation TypeScript
1.3 Configuration
# Vérifier les variables d'environnement
cat .env | grep -E "QUEUE_WORKERS_ENABLED|REDIS|R2"
Actions :
- Vérifier
QUEUE_WORKERS_ENABLED=true - Vérifier les variables Redis (HOST, PORT, PASSWORD)
- Vérifier les variables R2 (BUCKET_NAME, ACCOUNT_ID, ACCESS_KEY_ID, SECRET_ACCESS_KEY)
1.4 Test de démarrage
# Démarrer le backend en mode worker
RUN_MODE=worker npm run dev
Actions :
- Vérifier les logs : "WorkerExportModule initialized"
- Vérifier les logs : "WorkerEmailModule initialized"
- Vérifier les logs : "WorkerAiModule initialized"
- Vérifier les logs : "WorkerDocModule initialized"
- Vérifier qu'il n'y a pas d'erreurs de dépendances circulaires
Phase 2 : Tests (Aujourd'hui)
2.1 Test export async
# Tester un export async
curl -X GET "http://localhost:3000/api/export/async?entity=sessions&format=csv" \
-H "Authorization: Bearer YOUR_TOKEN"
Vérifications :
- La réponse contient
jobRunIdetexportJobId - Le job apparaît dans
job_runsavec statusQUEUED - Le worker traite le job et le complète
- Le status passe à
COMPLETEDdansjob_runs - Un
file_objectest créé dans R2
2.2 Test polling frontend
- Créer un export depuis l'UI
- Vérifier que le polling démarre automatiquement
- Vérifier que le statut est mis à jour en temps réel
- Vérifier que le téléchargement fonctionne une fois terminé
Phase 3 : Améliorations (Semaine prochaine)
3.1 OCR réel
- Implémenter OCR avec Tesseract.js dans
DocOcrProcessor - Tester sur images PNG/JPG
- Tester sur pages PDF
3.2 Dashboard de monitoring
- Créer une page admin pour surveiller les workers
- Afficher les métriques (queue depth, success rate, etc.)
- Afficher les jobs en DLQ
3.3 Tests unitaires
- Tests pour
ExportBuildProcessor - Tests pour
EmailSendProcessor - Tests pour
AiRunProcessor
📋 Checklist Complète
🔴 Urgent (Avant production)
- Migrations exécutées
- Types DB générés
- Configuration environnement vérifiée
- Test export async end-to-end
- Vérification que les workers démarrent
🟡 Important (Court terme)
- Implémenter OCR réel
- Dashboard de monitoring basique
- Tests unitaires pour processors critiques
- Documentation API
🟢 Souhaitable (Long terme)
- Tests d'intégration complets
- Migration progressive des endpoints existants
- Optimisations de performance
- Runbook opérationnel complet
🔍 Points d'Attention
Dépendances circulaires
- ✅ Résolues avec
forwardRef()dansWorkerExportModule - ⚠️ Surveiller lors de l'ajout de nouveaux workers
Types DB
- ⚠️ Vérifier que les types sont générés après les migrations
- ⚠️ Supprimer les casts
as anytemporaires
Configuration
- ⚠️
QUEUE_WORKERS_ENABLEDdoit êtretruepour les workers - ⚠️
QUEUE_WORKERS_ENABLEDpeut êtrefalsepour l'API (recommandé)
Performance
- ⚠️ Surveiller la profondeur des queues
- ⚠️ Configurer les retries et backoff selon les besoins
- ⚠️ Nettoyer les jobs complétés régulièrement
📚 Documentation
- WORKERS_ARCHITECTURE.md : Architecture complète
- WORKERS_DEPLOYMENT_CHECKLIST.md : Checklist de déploiement
- WORKERS_TESTING_GUIDE.md : Guide de test
- WORKERS_IMPLEMENTATION_SUMMARY.md : Résumé de l'implémentation
🎯 Objectif
Objectif immédiat : Workers opérationnels en production
Actions prioritaires :
- Exécuter migrations
- Générer types
- Tester export async
- Vérifier démarrage workers
Une fois ces étapes complétées, l'architecture sera 100% opérationnelle et prête pour la production.