Configuração de Filas
Configure e otimize as filas de jobs no n8n para melhorar performance, escalabilidade e confiabilidade em ambientes de produção.
Conceitos Fundamentais
O que são Filas?
Filas são sistemas que gerenciam jobs (tarefas) de forma assíncrona, permitindo:
- Processamento paralelo de múltiplos workflows
- Melhor performance em ambientes com alta carga
- Escalabilidade horizontal com múltiplos workers
- Resiliência contra falhas temporárias
Tipos de Jobs
Jobs de Execução de Workflow:
- Execução de workflows completos
- Processamento de triggers
- Execução de nodes individuais
Jobs de Webhook:
- Processamento de webhooks recebidos
- Notificações em tempo real
- Integração com sistemas externos
Configuração Básica
Docker Compose
version: '3.8'
services:
n8n:
image: n8nio/n8n
environment:
- DB_TYPE=postgresdb
- DB_POSTGRESDB_HOST=postgres
- DB_POSTGRESDB_DATABASE=n8n
- DB_POSTGRESDB_USER=n8n
- DB_POSTGRESDB_PASSWORD=n8n
- QUEUE_BULL_REDIS_HOST=redis
- QUEUE_BULL_REDIS_PORT=6379
- QUEUE_BULL_REDIS_PASSWORD=SUA_SENHA_REDIS_AQUI
- EXECUTIONS_PROCESS=main
- EXECUTIONS_MODE=regular
depends_on:
- postgres
- redis
postgres:
image: postgres:13
environment:
- POSTGRES_DB=n8n
- POSTGRES_USER=n8n
- POSTGRES_PASSWORD=n8n
volumes:
- postgres_data:/var/lib/postgresql/data
redis:
image: redis:6-alpine
command: redis-server --requirepass SUA_SENHA_REDIS_AQUI
volumes:
- redis_data:/data
volumes:
postgres_data:
redis_data:
Variáveis de Ambiente
# Configuração de Filas
QUEUE_BULL_REDIS_HOST=localhost
QUEUE_BULL_REDIS_PORT=6379
QUEUE_BULL_REDIS_PASSWORD=SUA_SENHA_REDIS_AQUI
QUEUE_BULL_REDIS_DB=0
# Configuração de Execução
EXECUTIONS_PROCESS=main
EXECUTIONS_MODE=regular
EXECUTIONS_TIMEOUT=3600
EXECUTIONS_TIMEOUT_MAX=7200
# Configuração de Workers
EXECUTIONS_WORKER_CONCURRENCY=1
EXECUTIONS_WORKER_TIMEOUT=3600
Estrutura de Jobs
Jobs de Execução de Workflow
// Job de execução de workflow
{
id: 'workflow-execution-123',
type: 'workflow',
data: {
workflowId: 'abc123',
},
triggerData: { /*dados do trigger*/ },
executionMode: 'regular',
priority: 0,
delay: 0,
attempts: 3
}
Jobs de Webhook
// Job de webhook
{
id: 'webhook-456',
type: 'webhook',
data: {
workflowId: 'def456',
method: 'POST',
},
headers: { /* headers */ },
body: { /* payload */ },
priority: 1, // Prioridade alta para webhooks
attempts: 3
}
Retry e Falhas
Configuração de Retry
<IonicIcon name="key-outline" style={{fontSize: '24px', color: '#ea4b71'}} />
configurações de retry
EXECUTIONS_RETRY_ON_ERROR=true
EXECUTIONS_RETRY_ON_FAILURE=true
EXECUTIONS_RETRY_ATTEMPTS=3
EXECUTIONS_RETRY_DELAY=5000 # 5 segundos
EXECUTIONS_RETRY_BACKOFF=exponential # exponential ou linear
Tratamento de Falhas
// Estratégias de retry
const retryStrategies = {
exponential: (attempt) => Math.pow(2, attempt) * 1000, // 1s, 2s, 4s
linear: (attempt) => attempt * 1000, // 1s, 2s, 3s
fixed: (attempt) => 5000 // Sempre 5s
};
Monitoramento
Métricas Redis
Comandos de Monitoramento
<IonicIcon name="server-outline" style={{fontSize: '24px', color: '#ea4b71'}} />
redis-cli keys "*"
<IonicIcon name="time-outline" style={{fontSize: '24px', color: '#ea4b71'}} />
REDIS_PORT="6379"
REDIS_PASSWORD="SUA_SENHA_REDIS_AQUI"
<IonicIcon name="analytics-outline" style={{fontSize: '24px', color: '#ea4b71'}} />
echo "=== Status Redis ==="
redis-cli -h $REDIS_HOST -p $REDIS_PORT -a $REDIS_PASSWORD info server | grep uptime_in_seconds
echo "=== Memória ==="
redis-cli -h $REDIS_HOST -p $REDIS_PORT -a $REDIS_PASSWORD info memory | grep used_memory_human
echo "=== Filas n8n ==="
echo "Jobs na fila: $(redis-cli -h $REDIS_HOST -p $REDIS_PORT -a $REDIS_PASSWORD llen n8n:queue:jobs)"
echo "Webhooks na fila: $(redis-cli -h $REDIS_HOST -p $REDIS_PORT -a $REDIS_PASSWORD llen n8n:queue:webhooks)"
echo "Jobs processados: $(redis-cli -h $REDIS_HOST -p $REDIS_PORT -a $REDIS_PASSWORD get n8n:stats:processed)"
echo "Jobs falharam: $(redis-cli -h $REDIS_HOST -p $REDIS_PORT -a $REDIS_PASSWORD get n8n:stats:failed)"
Diagnóstico de Filas
<IonicIcon name="grid-outline" style={{fontSize: '24px', color: '#ea4b71'}} />
## Diagnóstico de Filas
echo "=== Diagnóstico de Filas n8n ==="
echo
# Verificar status do Redis
echo "1. Status do Redis:"
redis-cli -h $REDIS_HOST -p $REDIS_PORT -a $REDIS_PASSWORD ping
echo
# Verificar filas ativas
echo "2. Filas Ativas:"
redis-cli -h $REDIS_HOST -p $REDIS_PORT -a $REDIS_PASSWORD keys "n8n:queue:*"
echo
# Contar jobs em cada fila
echo "3. Jobs por Fila:"
for queue in $(redis-cli -h $REDIS_HOST -p $REDIS_PORT -a $REDIS_PASSWORD keys "n8n:queue:*"); do
count=$(redis-cli -h $REDIS_HOST -p $REDIS_PORT -a $REDIS_PASSWORD llen $queue)
echo "$queue: $count jobs"
done
echo
# Verificar jobs com falha
echo "4. Jobs com Falha:"
redis-cli -h $REDIS_HOST -p $REDIS_PORT -a $REDIS_PASSWORD keys "n8n:queue:*:failed" | while read queue; do
count=$(redis-cli -h $REDIS_HOST -p $REDIS_PORT -a $REDIS_PASSWORD llen $queue)
if [ $count -gt 0 ]; then
echo "$queue: $count jobs falharam"
fi
done
Alertas e Notificações
// Configuração de alertas
const alertConfig = {
queueSize: {
threshold: 100,
action: 'notify_admin'
},
failedJobs: {
threshold: 10,
action: 'restart_worker'
},
memoryUsage: {
threshold: 80,
action: 'scale_up'
}
};
Otimização
Configurações de Performance
# Otimizar para alta carga
EXECUTIONS_WORKER_CONCURRENCY=4
EXECUTIONS_WORKER_TIMEOUT=7200
QUEUE_BULL_REDIS_DB=1
QUEUE_BULL_REDIS_MAX_RETRIES_PER_REQUEST=3
# Configurações de memória
QUEUE_BULL_REDIS_MAX_MEMORY_POLICY=allkeys-lru
QUEUE_BULL_REDIS_MAX_MEMORY=2gb
Escalabilidade Horizontal
# docker-compose.override.yml
version: '3.8'
services:
n8n-worker-1:
image: n8nio/n8n
environment:
- EXECUTIONS_PROCESS=worker
- EXECUTIONS_WORKER_CONCURRENCY=2
depends_on:
- redis
- postgres
n8n-worker-2:
image: n8nio/n8n
environment:
- EXECUTIONS_PROCESS=worker
- EXECUTIONS_WORKER_CONCURRENCY=2
depends_on:
- redis
- postgres
Troubleshooting
Problemas Comuns
Jobs não processados:
# Verificar workers ativos
docker ps | grep n8n
# Verificar logs dos workers
docker logs n8n-worker-1
Redis sem conexão:
# Testar conectividade
redis-cli -h $REDIS_HOST -p $REDIS_PORT -a $REDIS_PASSWORD ping
# Verificar configurações
echo $QUEUE_BULL_REDIS_HOST
echo $QUEUE_BULL_REDIS_PORT
Memória insuficiente:
# Verificar uso de memória
redis-cli -h $REDIS_HOST -p $REDIS_PORT -a $REDIS_PASSWORD info memory
# Limpar filas antigas
redis-cli -h $REDIS_HOST -p $REDIS_PORT -a $REDIS_PASSWORD flushdb
Próximos Passos
- Configuração de SSL/HTTPS - Segurança em produção
- Backup e Recovery - Proteção de dados
- Load Balancing - Alta disponibilidade
Configure suas filas adequadamente para garantir performance e confiabilidade em ambientes de produção!
Dica Pro
Use monitoramento em tempo real para identificar gargalos e otimizar configurações de filas.
Importante
Sempre configure autenticação e senhas fortes para Redis em ambientes de produção.
Recurso Adicional
Considere usar Redis Cluster para alta disponibilidade em ambientes críticos.