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é)

Redis · Bull Queue

bull:jobs:active

bull:jobs:waiting

Pub/Sub · coordination workers

N8N Main · :5678

Interface web

API REST

Webhooks · déclencheurs

Enqueue jobs → Redis

Worker 1 · replica

Worker 2 · replica

Worker N · 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. La base actuelle en compte une vingtaine, organisées par domaine :

DomaineTables principales
TelegramTelegram Authorized users, Telegram Banned Users, Telegram Pending Approvals
DockerDocker_image_policies, Docker_pending_updates, Docker_pending_upd_approvals
Notificationsnotification_routing, notification_history, pending_notifications, pending_deferred, escalation_tracking
Erreurserror_dead_letter_queue, error_handling_config
Telemetryclaude_code_active_sessions, claude_code_sessions_v2
Sync externeOdoo_github_project_mapping, timetrackr_user_mapping, content_pipeline
Workflowsn8n_trigger_whitelist, n8n_pending_actions, n8n_datatable_metadata

N8N communique avec l’AI Stack via HTTP interne :

// HTTP Request vers CLI Ollama (Codex par défaut)
{
"url": "http://cli-ollama:11434/api/generate",
"method": "POST",
"body": {
"model": "codex-yolo",
"prompt": "Analyse ce message...",
"stream": false
}
}

Cas d’usage IA :

  • Intent detection — Le Telegram Orchestrator utilise CLI Ollama pour router les messages
  • MCP via gateway — Workflows admin via les outils MCP whitelistés (n8n_get_workflow, n8n_executions, etc.)
  • RAG — Recherche sémantique dans Qdrant pour enrichir les réponses
  • Analyse d’erreurs — Profile error-analyst consommé par le workflow GEH AI Auto-Fix
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