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 usace-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 usaRABBITMQ_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 dolib-streaming. O subscriber do Hub continua indisponível: habilitá-lo é rejeitado na inicialização até que exista um contrato compatível de worker downstream.
