Saltar al contenido principal
Los productos Lerian emiten eventos de dominio — hechos de negocio en tiempo pasado, como la creación de una cuenta o la emisión de una credencial — hacia un backbone de streaming compartido. Cualquier servicio o suscriptor downstream los consume sin acoplarse a las APIs internas del productor. Esta página describe el contrato de transporte que sigue cada evento de la plataforma. Las páginas por producto listan los eventos concretos que cada sistema emite y consume.

Transporte

Los eventos viajan como mensajes CloudEvents 1.0 en modo de contenido binario sobre Kafka. El modo binario coloca los atributos de contexto de CloudEvents en las cabeceras del registro de Kafka, cada una con el prefijo ce-, y el cuerpo del evento en el valor del registro como JSON. Un consumidor lee el enrutamiento y la identidad desde las cabeceras sin deserializar el payload.

El sobre

Cada registro lleva estas cabeceras de CloudEvents.
CabeceraPresenciaContiene
ce-specversionSiempreVersión de la especificación CloudEvents — 1.0.
ce-idSiempreId único del evento (UUIDv7). Deduplica por este valor.
ce-sourceSiempreEl servicio productor.
ce-typeSiempreTipo de evento — studio.lerian.<resource>.<event>.
ce-timeSiempreMarca de tiempo de emisión (RFC 3339).
ce-resourcetypeSiempreEl recurso — por ejemplo account.
ce-eventtypeSiempreEl evento — por ejemplo created.
ce-schemaversionSiempreVersión del esquema del payload.
ce-subjectCuando aplicaEl id del agregado al que se refiere el evento.
ce-tenantidCuando aplicaEl tenant propietario; se omite en el ámbito single-tenant.
ce-datacontenttypeCuando aplicaTipo de medio del cuerpo — application/json.

Tipo de evento

La cabecera ce-type nombra el evento como studio.lerian.<resource>.<event>. La creación de una cuenta en el ledger es studio.lerian.account.created. Los dos segmentos también aparecen por separado en ce-resourcetype y ce-eventtype, de modo que un consumidor filtra por el tipo completo o por sus partes.

Nombres de tópicos

Cada evento llega a un tópico de Kafka nombrado por el recurso y el evento que transporta, bajo un prefijo de plataforma compartido:
lerian.streaming.<resource>.<event>
La creación de una cuenta en el ledger llega a lerian.streaming.account.created; la creación de un titular en el CRM a lerian.streaming.holder.created. El prefijo es idéntico en todos los productores Lerian, así que un consumidor se suscribe por recurso y evento sin necesidad de saber qué servicio emitió el registro. El nombre del tópico no lleva sufijo de versión — la versión del esquema del payload viaja en la cabecera ce-schemaversion (consulta Versionado de esquema), así que un cambio de esquema nunca renombra un tópico.

Fuente

ce-source identifica el servicio productor y se configura en el despliegue mediante la variable de entorno STREAMING_CLOUDEVENTS_SOURCE; no está fijada en el producto. Registra dónde se originó un registro, para auditoría y enrutamiento del lado del consumidor. El nombre del tópico no deriva de ella — los tópicos usan el prefijo compartido lerian.streaming. sin importar la fuente — así que un despliegue puede asignar cualquier valor de fuente estable y descriptivo.
ProductorFuente predeterminada
Ledger de Midazlerian.midaz.ledger
CRM de Midazlerian.midaz.crm

Subject y tenant

ce-subject lleva el id del agregado al que se refiere el evento — la cuenta, la transacción o la credencial que el hecho describe. ce-tenantid lleva el tenant propietario en despliegues multi-tenant; se omite en los eventos de negocio single-tenant, así que un consumidor trata la ausencia de id de tenant como un ámbito single-tenant válido y no como un error.

Versionado de esquema

Cada evento declara su propia versión de esquema de payload en ce-schemaversion, independiente de los demás eventos de la misma fuente. El valor predeterminado es 1.0.0. Un incremento menor es aditivo y retrocompatible; un incremento mayor es un cambio incompatible. La versión vive en la cabecera, nunca en el nombre del tópico, así que un consumidor que lee los payloads como un lector tolerante — ignorando los campos desconocidos — no se ve afectado por un cambio aditivo.

Garantías de entrega

La entrega es at-least-once. Un consumidor confirma su posición solo después de terminar de procesar un registro, así que una caída a mitad del procesamiento reprocesa el registro en lugar de descartarlo, lo que significa que el mismo evento puede llegar más de una vez. Deduplica por ce-id y mantén los handlers idempotentes. En el lado del productor, la durabilidad proviene de un outbox transaccional. Un producto escribe el evento en su outbox dentro de la misma transacción de base de datos que el cambio de estado que lo generó, de modo que el evento y el hecho que reporta se confirman o se revierten juntos. Luego un relay publica en Kafka las filas confirmadas del outbox y reintenta durante las caídas del broker, así que ningún hecho de negocio confirmado se pierde antes de llegar al stream.