Pular para o conteúdo principal

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

  1. Configuração de SSL/HTTPS - Segurança em produção
  2. Backup e Recovery - Proteção de dados
  3. 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.