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:Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01F5FspH2V3Tc4tvBapokCKV
Loading
Please register or sign in to comment