Processamento de Workflows na Fila
Esta documentação técnica descreve o funcionamento do sistema de processamento de workflows a partir da fila RabbitMQ, implementado pelo comandoProcessWorkflowFromQueue.
Visão Geral
OProcessWorkflowFromQueue é um comando do Laravel responsável por consumir mensagens da fila RabbitMQ e processar workflows. Este componente é fundamental para a execução assíncrona de workflows no IntegraBot, permitindo que ações sejam executadas em segundo plano sem bloquear a interface do usuário.
Arquitetura
O processamento de workflows segue uma arquitetura baseada em filas, onde:- Os workflows são enfileirados no RabbitMQ quando acionados
- O comando
ProcessWorkflowFromQueueconsome as mensagens da fila - Cada workflow é processado de acordo com suas ações configuradas
- Os resultados são armazenados no banco de dados
Configuração do RabbitMQ
O sistema utiliza o RabbitMQ como broker de mensagens, com as seguintes configurações:- Fila:
workflows.process - Durabilidade: Sim (mensagens persistem mesmo se o servidor for reiniciado)
- Exclusividade: Não (múltiplos consumidores podem acessar a fila)
- Auto-delete: Não (a fila não é excluída quando não há consumidores)
Ciclo de Vida do Processamento
1. Consumo da Fila
O comando inicia uma conexão com o RabbitMQ e configura um consumidor para a filaworkflows.process. Ele permanece em execução, aguardando novas mensagens.
2. Processamento de Mensagens
Quando uma mensagem é recebida, o sistema:- Decodifica o conteúdo JSON da mensagem
- Extrai o ID da execução do workflow
- Chama o método
processWorkflow()para processar o workflow - Confirma o recebimento da mensagem (ack) após o processamento
3. Processamento do Workflow
O métodoprocessWorkflow() é responsável por:
- Buscar a execução do workflow no banco de dados
- Verificar o status atual da execução
- Processar as ações associadas à execução
- Atualizar o status da execução
4. Processamento de Ações
Cada ação do workflow é processada pelo métodoprocessActionExecution(), que:
- Verifica o status atual da ação
- Executa a ação de acordo com seu tipo (email, webhook, etc.)
- Atualiza o status da ação
- Armazena o resultado ou erro da execução
5. Finalização do Workflow
Após processar todas as ações, o sistema:- Verifica se todas as ações foram concluídas
- Atualiza o status do workflow para “concluído” ou “agendado”
- Registra a data de conclusão, se aplicável
Estados de Execução
Estados do Workflow
- PENDING: Workflow criado, mas ainda não iniciado
- SCHEDULED: Workflow agendado para execução futura
- RUNNING: Workflow em execução
- COMPLETED: Workflow concluído com sucesso
- FAILED: Workflow falhou durante a execução
Estados das Ações
- PENDING: Ação criada, mas ainda não iniciada
- SCHEDULED: Ação agendada para execução futura
- RUNNING: Ação em execução
- COMPLETED: Ação concluída com sucesso
- FAILED: Ação falhou durante a execução
Tratamento de Erros
O sistema implementa um robusto tratamento de erros:- Erros durante o processamento são capturados e registrados
- Ações com erro são marcadas como “falhas”
- Informações detalhadas sobre o erro são armazenadas
- Workflows com erros críticos são marcados como “falhos”
- Erros de conexão com o RabbitMQ são tratados adequadamente
Agendamento de Ações
O sistema suporta o agendamento de ações para execução futura:- Ações com
scheduled_fordefinido são executadas apenas quando o horário chegar - Workflows com ações futuras são marcados como “agendados”
- O sistema verifica periodicamente se há ações agendadas prontas para execução
Tipos de Ações Suportados
Atualmente, o sistema suporta os seguintes tipos de ações:- Email: Envio de emails com suporte a templates e variáveis
- Webhook: Envio de requisições HTTP para endpoints externos (em desenvolvimento)
- API: Chamadas a APIs externas (em desenvolvimento)
- Database: Operações no banco de dados (em desenvolvimento)
Execução Manual
Para executar o processador de workflows manualmente, utilize o seguinte comando:Execução como Serviço
Para ambientes de produção, recomenda-se configurar o processador como um serviço do sistema, utilizando ferramentas como Supervisor ou systemd.Exemplo de Configuração do Supervisor
Considerações de Performance
- O processador utiliza o padrão de qualidade de serviço (QoS) do RabbitMQ para limitar o número de mensagens processadas simultaneamente
- Cada ação é processada em sua própria transação de banco de dados para evitar bloqueios longos
- O sistema implementa mecanismos para evitar o processamento repetido de workflows já concluídos
Logs e Monitoramento
O sistema gera logs detalhados sobre o processamento de workflows:- Informações sobre o início e conclusão de workflows
- Detalhes sobre a execução de cada ação
- Erros e exceções durante o processamento
- Métricas de performance e tempo de execução
Resolução de Problemas
Mensagens não estão sendo processadas
- Verifique se o RabbitMQ está em execução e acessível
- Confirme se as credenciais de acesso estão corretas
- Verifique se a fila
workflows.processexiste
Ações não estão sendo executadas
- Verifique o status das ações no banco de dados
- Confirme se as ações estão configuradas corretamente
- Verifique se há erros nos logs relacionados às ações específicas
Workflows ficam presos no estado “running”
- Verifique se há ações em execução que não foram concluídas
- Confirme se o processador está em execução
- Verifique se há erros nos logs que possam indicar problemas no processamento

