Aller au contenu

N8N en mode Queue

Le mode Queue de N8N est une architecture d’exécution distribuée où les workflows sont délégués à des processus séparés (workers) via une file d’attente Redis. Cette architecture remplace le mode par défaut où tout s’exécute dans un seul processus.

ComposantRôleInstance
MainInterface web, API, déclenchement des workflows1 (singleton)
WorkersExécution effective des workflowsN (scalable)
RedisFile d’attente Bull + coordination Pub/Sub1 (partagé)
PostgreSQLStockage des workflows, credentials, historique1 (partagé)
┌─────────────────────────────────────────────────────────┐
│ N8N Main (port 5678) │
│ ├─ Interface web │
│ ├─ API REST │
│ ├─ Webhooks (déclencheurs) │
│ └─ Enqueue jobs → Redis │
└───────────────────────┬─────────────────────────────────┘
┌─────────────────────────────────────────────────────────┐
│ Redis (Bull Queue) │
│ ├─ Queue: bull:jobs:active │
│ ├─ Queue: bull:jobs:waiting │
│ └─ Pub/Sub: coordination workers │
└───────────────────────┬─────────────────────────────────┘
┌───────────────┼───────────────┐
▼ ▼ ▼
┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│ Worker 1 │ │ Worker 2 │ │ Worker N │
│ (replica) │ │ (replica) │ │ (replica) │
└─────────────┘ └─────────────┘ └─────────────┘

Par défaut, N8N exécute les workflows dans le même processus que l’interface web. Conséquences :

SymptômeCauseImpact
Interface lenteCPU monopolisé par un workflowUX dégradée
Timeouts webhooksWorkflow long bloque la réponseIntégrations cassées
Pas de parallélismeUn seul thread d’exécutionGoulot d’étranglement
Propagation des crashsErreur mémoire = tout tombePerte de service

Cette configuration répond à quatre besoins concrets :

  1. Appels API longs — Les workflows utilisant Claude/IA peuvent prendre 5-30 secondes par appel. Sans Queue, l’interface serait bloquée.

  2. Parallélisme — Plusieurs webhooks peuvent arriver simultanément (commits GitHub, messages Telegram). Chaque worker traite un job indépendamment.

  3. Tâches batch — Les imports de données ou synchronisations massives (Odoo ↔ N8N) sont exécutés en arrière-plan sans impacter l’UI.

  4. Fiabilité — Les jobs échoués sont automatiquement re-tentés. Un worker qui crash n’affecte pas les autres.


services:
n8n:
image: n8n-custom:latest # Image avec nodes custom
environment:
- EXECUTIONS_MODE=queue
- QUEUE_BULL_REDIS_HOST=n8n-redis
- N8N_ENCRYPTION_KEY=${N8N_ENCRYPTION_KEY}
depends_on:
- n8n-postgres
- n8n-redis
n8n-worker:
image: n8n-custom:latest
command: worker
environment:
- EXECUTIONS_MODE=queue
- QUEUE_BULL_REDIS_HOST=n8n-redis
- N8N_ENCRYPTION_KEY=${N8N_ENCRYPTION_KEY}
deploy:
replicas: 5
n8n-redis:
image: redis:7-alpine
volumes:
- n8n-redis-data:/data
n8n-postgres:
image: postgres:15
environment:
- POSTGRES_DB=n8n

Le nombre de workers (5 dans cette configuration) est déterminé par deux contraintes :

ContrainteCalculRésultat
Règle empirique1 worker par vCPU + 1 marge4 + 1 = 5 workers
RAM disponible~400 MB par worker5 × 400 = 2 GB (budget n8n-stack)

N8N propose des Data Tables pour stocker des données structurées directement dans l’instance :

TableUsage
authorized_usersIDs Telegram autorisés
image_policiesPolitique de mise à jour par image Docker
pending_updatesQueue des updates Docker à appliquer
github_project_mappingMapping repos GitHub ↔ projets Odoo
trigger_whitelistWorkflows autorisés via Telegram

N8N communique avec l’AI Stack via HTTP interne :

// HTTP Request vers Claude Ollama
{
"url": "http://claude-ollama:11434/api/generate",
"method": "POST",
"body": {
"model": "claude-sonnet-4-20250514",
"prompt": "Analyse ce message...",
"stream": false
}
}

Cas d’usage IA :

  • Intent detection — Le Telegram Orchestrator utilise Claude pour router les messages
  • RAG — Recherche sémantique dans Qdrant pour enrichir les réponses
  • Résumés — Génération automatique de résumés de logs ou alertes
Fenêtre de terminal
# Voir les workers actifs
docker compose -f n8n-stack/docker-compose.yaml ps
# Logs d'un worker spécifique
docker logs n8n-stack-n8n-worker-3 --tail 100
# Scaler les workers dynamiquement
docker compose -f n8n-stack/docker-compose.yaml up -d --scale n8n-worker=8
# Vérifier la queue Redis
docker exec n8n-redis redis-cli LLEN bull:jobs:waiting

LimiteImpactMitigation
Redis single-instanceSPOF pour la queueSnapshots réguliers, reconstruction rapide
Pas de prioritésJobs traités FIFOWorkflows critiques pas privilégiés
Scaling manuelPas d’auto-scalingMonitoring + ajustement périodique

Si la charge augmente significativement :

  • Augmenter les workers jusqu’à la limite RAM
  • Passer à un VPS plus puissant (scaling vertical)
  • Séparer Redis/PostgreSQL sur leur propre instance

Si un workflow monopolise les ressources :

  • Créer une queue dédiée pour les workflows longs
  • Configurer des concurrency limits par workflow
  • Utiliser des sub-workflows pour découper les traitements

Si la fiabilité devient critique :

  • Déployer Redis en mode Sentinel (HA)
  • Ajouter un second instance N8N main en standby
  • Externaliser vers Redis Cloud ou AWS ElastiCache

Pour anticiper les problèmes, surveiller via Monitoring Stack :

MétriqueSeuil d’alerteAction
bull:jobs:waiting> 50 jobsAjouter workers
Worker CPU> 80% soutenuOptimiser workflows ou scaler
Exécutions échouées> 5%Investiguer les erreurs