Skip to main content
Reporter tiene 12 definiciones únicas de eventos de negocio emitidos. Son mensajes CloudEvents 1.0 en modo binario que viajan por RabbitMQ cuando STREAMING_ENABLED=true. Reporter no publica estos hechos en Kafka. Cuando el streaming está desactivado, manager y worker usan un emisor no-op y no inician un dispatcher de outbox.

Envelope y enrutamiento

Todos los eventos usan ce-source reporter, ce-schemaversion 1.0.0 y un ce-type calificado por fuente con la forma studio.lerian.reporter.<resource>.<event>. El payload es JSON con claves en snake_case. Consulta el envelope compartido para el contrato completo de headers de CloudEvents.

Semántica de entrega

Reporter emite después de confirmar el cambio de estado de negocio. Los errores de publicación no hacen fallar la operación subyacente.
  • Importante: publicación directa, con fallback a un outbox duradero cuando el circuito del broker está abierto.
  • Crítica: Reporter omite la publicación directa. Siempre persiste el evento en el outbox duradero para su despacho y reintento.
  • Ambas políticas solicitan on_routable_failure, pero las rutas actuales de RabbitMQ no definen un destino DLQ explícito. El publicador ve un fallo enrutable. Ninguna copia llega a una ruta dead-letter.
  • La entrega del broker es al menos una vez. Los consumidores deben ser idempotentes y deduplicar con (ce-source, ce-id).

Catálogo de eventos emitidos

Tanto manager como worker emiten report.errored. Todas las variantes usan el ce-id determinista reporter.report.error.<report_id>. Por eso, un consumidor que deduplica según (ce-source, ce-id) conserva solo el primer report.errored recibido para un report_id. Las transiciones críticas de plazo usan reporter.deadline.<event_type>.<deadline_id>.<timestamp>.

Contratos data completos

Estas declaraciones al estilo TypeScript reflejan la forma del JSON en el wire. ? indica que la propiedad es opcional. | null indica que la propiedad está presente pero puede ser null en JSON. Los timestamps son strings RFC 3339.

Riel interno de comandos separado

Manager envía a worker un comando JSON que no es CloudEvents por RabbitMQ. Usa RABBITMQ_EXCHANGE, RABBITMQ_GENERATE_REPORT_KEY y RABBITMQ_GENERATE_REPORT_QUEUE, con entrega persistente. Este comando no forma parte del catálogo público de eventos.

Estado de eventos entrantes

Reporter no consume ningún hecho público de lib-streaming. Su suscriptor de Hub permanece no disponible: habilitarlo se rechaza al iniciar hasta que exista un contrato de worker downstream compatible.