Skip to content
Commit 1e75a239 authored by PySTaMbI4's avatar PySTaMbI4
Browse files

fix: разорвать цикл обратной публикации broadcast-событий



BroadcastEnvelopeHandler передиспатчивал пришедшее из Kafka событие на
локальный EventDispatcher без пометки происхождения — а
BroadcastForwardingListener слушает тот же класс события и сразу же
публикует его обратно в broadcast-events. Любой сервис, который и
потребляет broadcast-events, и сам транслирует этот же класс события
(PingEvent — все сервисы; PaymentCompletedEvent — Money), гонял
сообщение по кругу бесконечно.

Живьём подтверждено: один тестовый платёж заполнил топик десятками
тысяч дублей за секунды, как только у PaymentCompletedEvent появились
слушатели с реальным побочным эффектом (History, Reports) — до этого
баг был тихим (PingEventListener только логирует).

Добавлен BroadcastGuard — реентрантный флаг, подавляющий обратную
публикацию, пока BroadcastEnvelopeHandler передиспатчивает входящее
сообщение. Корректен для однопоточной синхронной обработки одного
сообщения за раз (ровно как работает messenger:consume здесь).

После фикса: 1 событие → 1 сообщение в Kafka → 1 строка на каждого
подписчика, без дублей — перепроверено вживую.

Co-Authored-By: default avatarClaude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01F5FspH2V3Tc4tvBapokCKV
parent cbf4634d
Loading
Loading
Loading
Loading
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment