Skip to main content
O Dispatcher de Liquidação de Custos é o primeiro estágio do pipeline de faturamento baseado em uso. Ele escaneia o banco de dados em busca de registros de custo que ainda não foram atribuídos a um lote, agrupa-os pelo costBatchWindowRef e envia os totais agregados para uma camada de cache Redis. Isso prepara os dados para o Processador de Liquidação de Custos, que lida com o reporte efetivo ao billing meter. Ao separar o despacho do processamento, o sistema alcança melhor throughput e isolamento de falhas — o dispatcher pode executar frequentemente sem se preocupar com rate limits de APIs externas ou disponibilidade do provedor de billing.
Agendamento: A cada 15 minutos. O dispatcher respeita um limite configurável (COST_SETTLEMENT_DISPATCHER_LIMIT) para controlar quantos registros de custo são processados por execução, prevenindo sobrecarga do banco durante períodos de alto volume.
Monitore o gap entre janelas despachadas e processadas. Se o cache Redis cresce consistentemente, pode indicar que o Processador está ficando para trás — considere aumentar a frequência ou concorrência do Processador. Você pode rastrear isso comparando o número de chaves cost_batch_window_ref:* no Redis contra o número de registros CostBatch liquidados.

Objetivo

O dispatcher busca registros de custo não faturados, agrupa-os por costBatchWindowRef e envia os totais agregados para uma camada de cache para que o Processador possa liquidá-los.

Fluxo

1

Consultar custos não faturados

Buscar registros de custo ainda não atribuídos a um CostBatch, agrupados pelo costBatchWindowRef. A consulta respeita um limite configurável (COST_SETTLEMENT_DISPATCHER_LIMIT).
2

Filtrar janelas já despachadas

Para cada windowRef, verificar o cache. Se a chave já existe, a janela já foi despachada e é ignorada.
3

Enviar totais agregados para o cache

Para cada novo windowRef, incrementar atomicamente quantity e amount em um hash Redis via HINCRBY. Isso torna os dados disponíveis para o Processador.

Agendamento Recomendado

A cada 15 minutos.