Skip to main content
Os produtos Lerian emitem eventos de domínio — fatos de negócio no passado, como a criação de uma conta ou a emissão de uma credencial — em um backbone de streaming compartilhado. Qualquer serviço ou assinante downstream os consome sem se acoplar às APIs internas do produtor. Esta página descreve o envelope de transporte comum e as convenções da plataforma. As páginas por produto são a autoridade para os tipos, identificadores e políticas de entrega concretos de cada produtor. O Streaming Hub entrega esses mesmos eventos à sua própria infraestrutura — webhooks, SQS, RabbitMQ, EventBridge ou pull — com retentativas gerenciadas.

Transporte

Os eventos trafegam como mensagens CloudEvents 1.0 em modo de conteúdo binário. O modo binário coloca os atributos de contexto do CloudEvents nos cabeçalhos do transporte, cada um com o prefixo ce-, e o corpo do evento no valor da mensagem como JSON. Um consumidor lê o roteamento e a identidade a partir dos cabeçalhos sem desserializar o payload. A maioria dos produtores — Midaz, components/tracer do Midaz, Lender, Matcher, Consignado — publica sobre Kafka. Dois publicam o mesmo envelope sobre RabbitMQ: o Reporter roteia cada evento para um exchange configurado usando a chave do evento como routing key, e o Fetcher faz o mesmo para seus eventos terminais de job. As convenções de tipo e versionamento do CloudEvents são compartilhadas nos dois transportes; a página de cada produtor continua sendo a autoridade para ids, esquemas, destinos e política de entrega exatos. O repositório independente LerianStudio/tracer-pre-dev atualmente não possui streaming externo e não é este produtor.

O envelope

Todo registro carrega estes cabeçalhos CloudEvents.

Tipo do evento

O contrato v3 usa o formato qualificado pela fonte studio.lerian.<source>.<resource>.<event>. O mesmo valor <source> aparece em ce-source; ce-resourcetype e ce-eventtype carregam a chave de dispatch em cabeçalhos separados. Produtores ainda fixados na lib-streaming v2 usam o formato sem fonte studio.lerian.<resource>.<event>; consulte a página ou o manifesto específico do produtor antes de rotear.

Nomes de tópicos

Produtores Kafka no contrato v3 de stream por aplicação — incluindo Midaz, components/tracer do Midaz, Matcher, Lender e Consignado — enviam seus fatos de negócio JSON públicos para:
Os comandos usam lerian.streaming.<ce-source>.commands; os dead letters do produtor usam lerian.streaming.<ce-source>.dlq. Não existe um tópico .commands.dlq separado. O tipo de recurso, o tipo de evento e a versão do esquema permanecem nos cabeçalhos CloudEvents, portanto uma mudança de major não renomeia o tópico. Exemplos:
  • Fatos JSON públicos do ledger, CRM e Fees do Midaz: lerian.streaming.ledger
  • Fatos do components/tracer do Midaz: lerian.streaming.tracer
  • Fatos do Matcher: lerian.streaming.matcher
  • Fatos e comandos do Lender: lerian.streaming.lender e lerian.streaming.lender.commands
  • Fatos do gateway de Consignado: lerian.streaming.consignado-gw
Sinais internos de medição do produto ficam fora deste contrato público de integração e podem usar destinos e codificações diferentes. O Reporter e o Fetcher mantêm destinos explícitos do RabbitMQ. O Reporter usa seu exchange configurado com a chave do evento como routing key; o Fetcher usa RABBITMQ_JOB_EVENTS_EXCHANGE com job.completed ou job.failed. Seus valores de ce-type também são qualificados pela fonte.

Fonte

ce-source identifica o serviço produtor e faz parte do contrato wire. Os exemplos atuais de produtos v3 usam ledger, tracer (components/tracer do Midaz), matcher, lender, consignado-gw, fetcher ou reporter; todos, exceto o Matcher, fixam ou validam esse valor exato do roster, enquanto o Matcher deriva sua identidade wire do valor configurado. Produtores Kafka v3 incorporam a fonte ao tópico da aplicação, e todos os produtores v3 a incorporam ao ce-type. Portanto, alterá-la muda o roteamento e a identidade para os consumidores; trate isso como uma mudança incompatível.

Subject e tenant

ce-subject carrega o id do agregado a que o evento se refere — a conta, a transação ou a credencial que o fato descreve. ce-tenantid carrega o tenant proprietário. O comportamento em single-tenant depende do produtor: o Midaz sempre envia o literal default no escopo single-tenant ou sem tenant, enquanto outros produtores documentam seu próprio comportamento. Siga o contrato específico do produtor.

Versionamento de esquema

Cada evento declara sua própria versão de esquema do payload em ce-schemaversion, independente dos demais eventos da mesma fonte. O padrão é 1.0.0. Um incremento menor é aditivo e retrocompatível; um incremento maior é uma mudança incompatível. Nos streams de aplicação Kafka v3, a versão do esquema nunca muda o nome do tópico. Os exchanges e as routing keys explícitas do RabbitMQ também não mudam com um incremento de esquema. Um consumidor que lê os payloads como um leitor tolerante, ignorando campos desconhecidos, não é afetado por uma mudança aditiva.

Garantias de entrega

A entrega é at-least-once. Um consumidor confirma sua posição apenas depois de terminar de processar um registro, então uma queda no meio do processamento reprocessa o registro em vez de descartá-lo — o que significa que o mesmo evento pode chegar mais de uma vez. Deduplique pelo par (ce-source, ce-id) (o CloudEvents define a identidade do evento por essa combinação, e ce-id sozinho pode colidir entre fontes) e mantenha os handlers idempotentes. No lado do produtor, a política de entrega pertence a cada definição de evento, não à plataforma. Uma política respaldada por outbox garante relay durável e novas tentativas, mas não prova por si só que a gravação do estado de negócio e a inserção no outbox compartilhem uma transação de banco de dados. O Lender e o Consignado fazem essa gravação atômica para os eventos dos seus catálogos. O Fetcher persiste o estado terminal com um marcador pendente e depois insere o evento no outbox durável do Mongo em uma operação separada; um processo de reparo reemite o ce-id estável até que o marcador seja removido. O Reporter também emite após o commit do estado, e suas políticas críticas usam então um outbox durável do Mongo em uma operação separada. Uma queda ou uma inserção malsucedida no outbox nessa janela pós-commit perde o evento do Reporter: nenhuma reconciliação o recupera, e apenas um log de erro e uma métrica registram a perda. O Matcher e o Reporter também publicam sinais operacionais diretamente com fallback para o outbox. Consulte a página de eventos do produto para conhecer tanto a política quanto o limite transacional e, quando o produto expuser um manifesto de streaming, leia-o na inicialização.

Catálogos por produto

Os trilhos do Brasil (STA, CCS, SLC, SPB, SPI, SILOC, SISBAJUD, transferência bancária e os serviços de Pix) também publicam eventos neste mesmo contrato; consulte a área de documentação de cada trilho para o seu catálogo.