Documentation Index
Fetch the complete documentation index at: https://docs.pingoai.com.br/llms.txt
Use this file to discover all available pages before exploring further.
Visao geral da mensageria
O ExclusiveDay usa RabbitMQ em dois padroes principais:- Event Bus (
@node-ts/bus-rabbitmq) para comandos/eventos de dominio. - RPC/Queue direta (
rabbitmq-client) para chamadas diretas entre backend e channel.
1) Filas Event Bus (RabbitMQ)
backend-event-bus-queue
- Servico dono da fila: backend
- Origem da configuracao:
RABBITMQ_QUEUE_NAMEno backend - Uso: recebe eventos/comandos que o backend precisa tratar via handlers do bus.
- Arquivo principal:
Backend-1/src/bus.ts
channel-event-bus-queue
- Servico dono da fila: channel
- Origem da configuracao:
RABBITMQ_QUEUE_NAMEno channel - Uso: recebe comandos/eventos de integracao (Baileys/Meta/schedule/campaign handlers).
- Arquivo principal:
channel-2/src/bus-rabbitmq/bus-rabbitmq.ts
Como o Event Bus processa
- Usa
prefetchcom concorrencia configurada pelo bus (withConcurrency(5)). - Mensagens podem ser persistentes (
persistentMessages: trueno channel). - Em erro, ocorre retorno para retry e depois DLQ quando estoura limite.
rabbitmq-transport.ts):
- fila de retry:
${queueName}-retry - dead letter queue:
dead_letter_queue(ou valor custom) - estrategia:
nackpara retry, e envio para DLQ ao atingir max retries.
2) Filas RPC diretas (RabbitMQ)
Estas filas sao usadas por chamadas request/response entre backend e channel.check-contact-number-queue
- Produtor: backend (
CheckContactNumberProducer) - Consumidor: channel (
CheckContactNumberConsumer) - Objetivo: validar se numero/grupo existe no canal.
- Entrada:
number,companyId,isGroup. - Saida: numero normalizado ou
null.
get-profile-picture-queue
- Produtor: backend (
GetProfilePictureProducer) - Consumidor: channel (
GetProfilePictureConsumer) - Objetivo: buscar foto de perfil no canal.
- Entrada:
number,companyId,whatsappId,contact?. - Saida: URL da foto; fallback para
FRONTEND_URL/nopicture.pngem erro.
create-or-update-contact-queue
- Produtor: backend (
CreateOrUpdateContactProducer) - Consumidor: channel (
CreatOrUpdateContactConsumer) - Objetivo: criar/atualizar contato de forma centralizada no channel.
- Entrada:
whatsappId,name,number,isGroup,email,profilePicUrl,companyId,channel,extraInfo,remoteJid. - Saida: objeto de contato atualizado/criado.
notification-queue
- Produtor: channel (
NotificationProducer) - Consumidor: backend (
NotificationConsumer) - Objetivo: entregar notificacoes para tempo real no frontend.
- Entrada:
namespace,channel,data. - Saida:
done(ack RPC). - Efeito final: backend emite via Socket.IO para o namespace/canal informado.
flow-queue (implementada no producer)
- Produtor encontrado: channel (
FlowProducer). - Objetivo: enfileirar execucao de flow.
- Status no codigo atual: producer encontrado; consumer nao localizado neste repositorio.
- Observacao: documentar como fila em uso potencial/externo ate mapear consumidor definitivo.
3) Fluxo de processamento (fim a fim)
- Frontend envia acao via HTTP para backend.
- Backend publica comando/evento no Event Bus ou chama fila RPC.
- Channel processa integracao (ex.: numero/foto/contato, envio de mensagem).
- Channel responde RPC ou publica notificacao.
- Backend consome e publica no Socket.IO.
- Frontend recebe atualizacao em tempo real.
4) Performance e processamento
Controles presentes no codigo
- Concorrencia do Event Bus:
5handlers simultaneos (withConcurrency(5)). - Prefetch Rabbit: segue a concorrencia configurada no transport.
- Retry Event Bus:
maxRetries: 3no backend/channel (config de bus). - Retry + DLQ custom (channel transport):
- retry queue dedicada
- dead letter queue dedicada
- nack para retry; DLQ quando excede limite.
- Publisher RPC com confirm: garante confirmacao de entrega no broker.
Pontos de custo/performance
rabbit.createRPCClient()e conexao por chamada nos producers pode elevar latencia sob alto volume.- RPC em cadeia para operacoes de contato/foto pode aumentar tempo de resposta de endpoints sincronos.
- Falhas no consumidor podem aumentar backlog e acionar retries.
- Fluxo de notificacao para Socket.IO depende da saude do consumer
notification-queue.
Recomendacoes praticas de operacao
- Monitorar profundidade das filas no painel do RabbitMQ.
- Observar taxa de mensagens em retry e DLQ.
- Medir latencia de RPC (
check-contact-number,get-profile-picture,create-or-update-contact). - Validar capacidade de concorrencia por ambiente antes de aumentar
withConcurrency. - Em picos, considerar conexao/publisher reutilizavel para reduzir overhead.
5) Variaveis de ambiente relacionadas
RABBITMQ_URIRABBITMQ_QUEUE_NAMERABBITMQ_URI_INTERNAL(deploy)RABBITMQ_QUEUE_NAME_BACKEND(deploy)RABBITMQ_QUEUE_NAME_CHANNEL(deploy)
6) Filas Redis (complemento de processamento)
Embora nao sejam RabbitMQ, impactam diretamente throughput do sistema de mensagens:message-queue-company-{id}message-ack-queue-company-{id}
concurrency: 5- rate control:
max 50por100ms - retry exponencial com
attempts: 3 - limpeza configurada de jobs concluídos/falhos
7) Arquivos de referencia
Backend-1/src/bus.tschannel-2/src/bus-rabbitmq/bus-rabbitmq.tschannel-2/src/bus-rabbitmq/rabbitmq-transport.tsBackend-1/src/producers/check-contact-number.producer.tsBackend-1/src/producers/get-profile-picture.producer.tsBackend-1/src/producers/create-or-update-contact.producer.tschannel-2/src/producers/notification.producer.tschannel-2/src/producers/flow.producer.tschannel-2/src/consumers/check-contact-number.consumer.tschannel-2/src/consumers/get-profile-picture.consumer.tschannel-2/src/consumers/create-or-update-contact.consumer.tsBackend-1/src/consumers/notification.consumer.tsBackend-1/src/queues/index.tsBackend-1/src/queues/workers/make-message.worker.tsBackend-1/src/queues/workers/make-message-ack.worker.ts