Skip to main content
Os produtos Lerian emitem eventos de domínio em um backbone de streaming compartilhado. Um evento de domínio é um fato de negócio no passado, por exemplo a criação de uma conta ou a emissão de uma credencial. Qualquer serviço ou subscriber 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 de cada produto são a referência definitiva para os tipos de evento concretos, os identificadores e a política de entrega de cada produtor. O Streaming Hub entrega esses mesmos eventos para sua própria infraestrutura (webhooks, SQS, RabbitMQ, EventBridge ou pull) com novas tentativas gerenciadas.

Transporte

Os eventos trafegam como mensagens CloudEvents 1.0 em modo binário de conteúdo. O modo binário coloca os atributos de contexto do CloudEvents em headers de transporte, cada um prefixado com ce-, e o corpo do evento no valor da mensagem como JSON. Um consumidor lê o roteamento e a identidade a partir dos headers sem desserializar o payload. A maioria dos produtores publica via Kafka: Midaz, Tracer (no Midaz), Lender, Matcher e Consignado. O Reporter publica o mesmo envelope via RabbitMQ. Ele roteia cada evento para um exchange configurado, usando a chave do evento como chave de roteamento. Os dois transportes compartilham as convenções de tipo e versionamento do CloudEvents. A página de cada produtor continua sendo a referência definitiva para ids, schemas, destinos e política de entrega exatos. O produtor Kafka do Tracer é o componente dentro do Midaz.

O envelope

Todo registro carrega estes headers do CloudEvents.

Tipo de evento

O contrato v3 usa a forma qualificada por source studio.lerian.<source>.<resource>.<event>. O mesmo valor de <source> aparece em ce-source. ce-resourcetype e ce-eventtype carregam a chave de despacho como headers separados. Produtores ainda fixados na lib-streaming v2 usam a forma sem source studio.lerian.<resource>.<event>. Verifique a página específica do produtor ou o manifesto antes de rotear.

Nomenclatura de tópicos

Produtores Kafka no contrato v3 de application stream (incluindo Midaz, components/tracer do Midaz, Matcher, Lender e Consignado) enviam seus fatos de negócio JSON públicos para:
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 schema permanecem nos headers do CloudEvents, então mudanças major de schema não renomeiam 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 do Consignado: lerian.streaming.consignado-gw
Sinais internos de metering do produto ficam fora deste contrato público de integração e podem usar destinos e codificações separados. O Reporter mantém um destino RabbitMQ explícito: seu exchange configurado, com a chave do evento como chave de roteamento. Seus valores de ce-type continuam qualificados por source.

Fonte

ce-source identifica o serviço produtor e faz parte do contrato de wire. Os exemplos atuais de produtos v3 usam ledger, tracer (components/tracer do Midaz), matcher, lender, consignado-gw ou reporter. Todos, exceto o Matcher, fixam ou validam esse valor exato do roster. O Matcher deriva sua identidade de wire a partir do valor configurado. Produtores Kafka v3 embutem a fonte no tópico de aplicação, e todos os produtores v3 a embutem em ce-type. Alterá-la, portanto, muda o roteamento e a identidade do consumidor. Trate isso como uma mudança que quebra compatibilidade.

Assunto e tenant

ce-subject carrega o ID do agregado a que o evento se refere (a conta, a transação ou a credencial a que o fato diz respeito). ce-tenantid carrega o tenant proprietário. Quando um evento não tem tenant, o comportamento é específico de cada produtor: o Midaz envia o literal default, enquanto outros produtores documentam seu próprio comportamento. Siga o contrato específico do produtor.

Versionamento de schema

Cada evento declara sua própria versão de schema do payload em ce-schemaversion, independente dos demais eventos da mesma fonte. O padrão é 1.0.0. Um incremento minor é aditivo e retrocompatível. Um incremento major introduz uma mudança que quebra compatibilidade. No application stream Kafka v3, a versão do schema nunca muda o nome do tópico. Um incremento de schema também deixa inalterados os exchanges e as chaves de roteamento explícitos do RabbitMQ. Uma mudança aditiva não afeta um consumidor que lê os payloads como um leitor tolerante e ignora campos desconhecidos.

Garantias de entrega

A entrega é pelo menos uma vez. Um consumidor confirma sua posição apenas depois de terminar de processar um registro. Uma falha durante o processamento reproduz o registro em vez de descartá-lo, então 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 o ce-id sozinho pode colidir entre fontes) e mantenha os handlers idempotentes. Do lado do produtor, a política de entrega pertence a cada definição de evento, não à plataforma. Uma política apoiada em outbox garante relay e nova tentativa duráveis. Por si só, ela não prova que a escrita de estado de negócio e a inserção no outbox compartilham uma única transação de banco de dados. O Lender e o Consignado fazem essa escrita atômica para seus eventos de catálogo. O Reporter emite depois do commit de estado, e suas políticas críticas então usam um outbox Mongo durável em uma operação separada. Uma falha ou uma inserção de outbox malsucedida nessa janela pós-commit perde o evento do Reporter. Nenhuma conciliaçã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 de outbox. Verifique a própria página de eventos do produto tanto para sua política quanto para seu limite transacional. Onde o produto expõe um manifesto de streaming, leia o manifesto na inicialização.

Catálogos por produto

Outros trilhos do Brasil também publicam eventos neste contrato. Use a página de eventos de um trilho ou o manifesto em runtime apenas quando o trilho expõe explicitamente seu catálogo.