Skip to content

Configurações de fila e melhora na auditoria (importação de inscritos) - #55

Merged
jeff-doliveira1 merged 2 commits into
developfrom
fix/send-email-import-registrations
Nov 9, 2026
Merged

jeff-doliveira1 merged 2 commits into
developfrom
fix/send-email-import-registrations

Conversation

@jeff-doliveira1

@jeff-doliveira1 jeff-doliveira1 commented Oct 16, 2026 •

Copy link
Copy Markdown
Member

Objetivo

Implementar o consumo das mensagens de importação de inscrições publicadas no RabbitMQ, realizando o envio de notificações por e-mail com controle de idempotência para evitar envios duplicados.

Alterações realizadas

  • Implementado o consumidor RabbitMQ para mensagens de importação de inscrições.
  • Adicionado controle de processamento por oportunidade e inscrição, utilizando restrição de unicidade no banco de dados.
  • Implementado bloqueio transacional para evitar processamento simultâneo da mesma inscrição.
  • Adicionado controle dos estados de processamento: pending, sending, sent, failed e unknown.
  • Implementado tratamento de mensagens duplicadas sem realizar novos envios.
  • Adicionado tratamento para resultados desconhecidos do envio SMTP, evitando reenvios automáticos potencialmente duplicados.
  • Ajustado o tratamento de falhas na persistência do estado unknown.
  • Implementado o uso de ack e nack para confirmação ou rejeição das mensagens.
  • Integrado o tratamento de mensagens inválidas e falhas com a DLQ configurada no RabbitMQ.
  • Adicionados testes automatizados para idempotência, tratamento de falhas e processamento concorrente.

Testes realizados

  • Processamento da primeira mensagem de uma inscrição.
  • Recebimento repetido da mesma mensagem.
  • Recebimento de mensagens com UUIDs diferentes para a mesma inscrição.
  • Prevenção de reenvio para inscrições com status sent, sending ou unknown.
  • Tratamento de falhas antes do envio SMTP.
  • Tratamento de resultados desconhecidos durante o envio.
  • Tratamento de falhas ao persistir o resultado desconhecido.
  • Validação do comportamento de ack e nack.
  • Validação do processamento concorrente.

Considerações

O controle de idempotência utiliza a combinação de oportunidade e inscrição como chave de identificação, independentemente do UUID da mensagem.

Os estados sending e unknown impedem reenvios automáticos para reduzir o risco de notificações duplicadas. A recuperação desses processamentos, quando necessária, depende de investigação e intervenção operacional.

A implementação não inclui mecanismos adicionais de retry ou reconciliação automática, que permanecem fora do escopo desta atividade.

@jeff-doliveira1 jeff-doliveira1 self-assigned this Oct 16, 2026
@jeff-doliveira1
jeff-doliveira1 force-pushed the fix/send-email-import-registrations branch 4 times, most recently from caa9003 to d663fc0 Compare October 28, 2026 13:46
@jeff-doliveira1
jeff-doliveira1 force-pushed the fix/send-email-import-registrations branch 3 times, most recently from 141c509 to e9ed0ef Compare November 3, 2026 17:14
@jeff-doliveira1
jeff-doliveira1 marked this pull request as ready for review November 3, 2026 17:14
@jeff-doliveira1 jeff-doliveira1 changed the title WIP: Configurações de fila e melhora na auditoria (importação de inscritos) Configurações de fila e melhora na auditoria (importação de inscritos) Nov 3, 2026
@jeff-doliveira1
jeff-doliveira1 marked this pull request as draft November 5, 2026 20:29
@jeff-doliveira1
jeff-doliveira1 force-pushed the fix/send-email-import-registrations branch 2 times, most recently from d224297 to e250025 Compare November 6, 2026 19:31
@jeff-doliveira1
jeff-doliveira1 force-pushed the fix/send-email-import-registrations branch from e250025 to 1aa8849 Compare November 6, 2026 20:02
@jeff-doliveira1
jeff-doliveira1 marked this pull request as ready for review November 6, 2026 20:04
@CaffeineIssues

Copy link
Copy Markdown
Member
  1. [P1] Falhas no RabbitMQ agora impedem a execução de comandos Artisan não relacionados. O construtor lança uma exceção enquanto o Laravel registra os comandos. Reproduzi a falha de php artisan list --raw com o broker indisponível; migrations e o package:discover do Composer também são afetados. A conexão deve ser aberta quando o consumo começar. RabbitMQService.php:51
  2. [P1] A conexão de retry usa uma configuração de senha inexistente. O publicador lê rabbitmq.password, mas a configuração define rabbitmq.pass. Em ambientes com autenticação por senha, a publicação do retry falha, deixando a mensagem original sem ACK e provocando o reinício do consumidor. Use a mesma chave da conexão principal. ImportRegistrationRetryPublisher.php:97
  3. [P1] Mensagens anteriormente válidas passam a ser rejeitadas após o deploy. O consumidor anterior aceitava opp_id e opp_name; a nova validação exige opportunity_id e opportunity_name, sem converter os campos antigos. Mensagens já enfileiradas — ou enviadas por produtores que ainda usam o formato anterior — recebem NACK sem recolocação na fila, em vez de gerar o e-mail. Reproduzi essa falha. Normalize os campos antigos antes da validação. ImportRegistrationProcessor.php:48–56
  4. [P2] A variável de ambiente de prefetch não tem efeito. A configuração define rabbitmq.prefetch_count, mas o consumidor lê rabbitmq.consumer.prefetch_count. Mesmo configurando RABBITMQ_PREFETCH_COUNT=25, o valor utilizado continua sendo 1. Corrija o caminho consultado. RabbitMQService.php:84

@jeff-doliveira1
jeff-doliveira1 merged commit 8fe81a4 into develop Nov 9, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants