Site

Workers

Os Workers são responsáveis por processar os Jobs que estão na fila do sistema. Quando um Job é enviado utilizando dispatch(), ele é armazenado na tabela mucrm_jobs. O Worker fica encarregado de buscar esses registros e executar automaticamente o método handle().


Como Funciona

  1. O sistema adiciona o Job na fila
  2. O Worker procura Jobs disponíveis
  3. O Worker reserva o Job
  4. O método handle() é executado
  5. O Job é removido da fila após sucesso
  6. Em caso de falha, o sistema aplica retry automático

Executando o Worker

php mucrm jobs:run

O que o Worker faz

  • Processamento em lote
  • Retry automático
  • Backoff progressivo
  • Controle de tentativas
  • Recuperação de Jobs abandonados
  • Failed Jobs automáticos
  • Proteção contra concorrência
  • Logs automáticos

Exemplo de Processamento

Job

<?php

namespace MUCRM\shared\jobs;

use MUCRM\engine\queue\job;

class send_welcome_email extends job
{
    public function handle(): void
    {
        echo 'Email enviado';
    }
}

Dispatch

send_welcome_email::dispatch();

Worker processando

php mucrm jobs:run

Logs Automáticos

Quando 'debug' => true, o Worker gera logs automáticos:

[INFO] Queue Worker iniciado

[INFO] Processando job MUCRM\shared\jobs\send_welcome_email

[INFO] Job MUCRM\shared\jobs\send_welcome_email processado com sucesso em 0.3s

[INFO] Worker finalizado. Jobs processados: 1

Jobs Abandonados

Se um Worker morrer durante o processamento, o sistema consegue recuperar automaticamente o Job. O Job volta para a fila após o tempo definido internamente pelo Worker. Isso evita perda de tarefas.


Retry Automático

Caso aconteça alguma exceção durante o processamento, o sistema automaticamente:

  • Registra o erro
  • Aplica retry
  • Aguarda o backoff
  • Tenta novamente

Failed Jobs

Quando o número máximo de tentativas é atingido, o Job é movido automaticamente para mucrm_failed_jobs.


Rodando Continuamente

Em produção, o ideal é manter o Worker rodando continuamente utilizando:

  • Supervisor
  • Cron
  • Agendadores da hospedagem
  • Serviços Linux

Exemplo usando Cron

* * * * * php /home/server/mucrm jobs:run

Diferença entre Scheduler e Worker

SistemaResponsabilidade
SchedulerAgenda tarefas automáticas
WorkerProcessa Jobs da fila

Fluxo Completo

Scheduler
    ↓
Adiciona Job na fila
    ↓
Worker processa
    ↓
handle()
    ↓
Job removido

Performance

Os Workers foram projetados para:

  • Baixo consumo de memória
  • Alta velocidade
  • Execução paralela
  • Processamento seguro
  • Compatibilidade com grandes volumes

Recomendação

Separar filas por categoria melhora bastante a performance:

public string $queue = 'email';

public string $queue = 'rankings';

public string $queue = 'payments';

Isso facilita: monitoramento, escalabilidade, organização, balanceamento de carga.