Skip to main content
O Reporter tem 12 definições únicas de eventos de negócio emitidos. São mensagens CloudEvents 1.0 no modo binário, transportadas pelo RabbitMQ quando STREAMING_ENABLED=true. O Reporter não publica esses fatos no Kafka. Quando o streaming está desligado, o manager e o worker usam um emissor no-op e não iniciam um dispatcher de outbox.

Envelope e roteamento

Todo evento usa ce-source reporter, ce-schemaversion 1.0.0 e um ce-type qualificado pela fonte no formato studio.lerian.reporter.<resource>.<event>. O payload é JSON com chaves em snake_case. Use o envelope compartilhado para o contrato completo de header do CloudEvents.

Semântica de entrega

O Reporter emite o evento depois que a mudança de estado de negócio recebe commit. Erros de publicação não falham a operação subjacente.
  • Importante: publicação direta, com fallback de outbox durável quando o circuito do broker está aberto.
  • Crítico: o Reporter pula a publicação direta. Ele sempre persiste o evento no outbox durável para despacho e nova tentativa.
  • As duas políticas solicitam on_routable_failure, mas as rotas atuais do RabbitMQ não definem um destino DLQ explícito. O publicador vê uma falha roteável. Nenhuma cópia vai para uma rota dead-letter.
  • A entrega do broker é pelo menos uma vez. Os consumidores devem ser idempotentes e fazer deduplicação com (ce-source, ce-id).

Catálogo de eventos emitidos

Tanto o manager quanto o worker emitem report.errored. Todas as variantes usam um ce-id determinístico reporter.report.error.<report_id>. Por isso, um consumidor que faz deduplicação por (ce-source, ce-id) mantém apenas o primeiro report.errored recebido para um report_id. Transições críticas de prazo usam reporter.deadline.<event_type>.<deadline_id>.<timestamp>.

Contratos data completos

Essas declarações no estilo TypeScript espelham o formato JSON transmitido. ? significa que a propriedade é opcional. | null significa que a propriedade está presente, mas pode ser null em JSON. Timestamps são strings RFC 3339.

Canal de comando interno separado

O manager envia ao worker um comando JSON que não é CloudEvents pelo RabbitMQ. Ele usa RABBITMQ_EXCHANGE, RABBITMQ_GENERATE_REPORT_KEY e RABBITMQ_GENERATE_REPORT_QUEUE, com entrega persistente. Esse comando não faz parte do catálogo público de eventos.

Status de eventos de entrada

O Reporter não consome nenhum fato público do lib-streaming. O subscriber do Hub continua indisponível: habilitá-lo é rejeitado na inicialização até que exista um contrato compatível de worker downstream.