From 703c12e9f608b4e35a56a7ccb15074e677e6b45e Mon Sep 17 00:00:00 2001 From: hailin Date: Tue, 13 Jan 2026 21:44:00 -0800 Subject: [PATCH] fix(contribution): run CDC sync in background to avoid blocking service startup - Change await to .then() for cdcConsumer.start() - Allows HTTP endpoints to be accessible during CDC sync Co-Authored-By: Claude Opus 4.5 --- .../application/event-handlers/cdc-event-dispatcher.ts | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/backend/services/contribution-service/src/application/event-handlers/cdc-event-dispatcher.ts b/backend/services/contribution-service/src/application/event-handlers/cdc-event-dispatcher.ts index b79d78fd..c162a164 100644 --- a/backend/services/contribution-service/src/application/event-handlers/cdc-event-dispatcher.ts +++ b/backend/services/contribution-service/src/application/event-handlers/cdc-event-dispatcher.ts @@ -51,14 +51,14 @@ export class CDCEventDispatcher implements OnModuleInit { this.handleAdoptionPostCommit.bind(this), ); - // 启动 CDC 消费者 - try { - await this.cdcConsumer.start(); + // 启动 CDC 消费者(非阻塞,在后台运行顺序同步) + // 不能 await,否则会阻塞服务启动,导致 HTTP 端点无法访问 + this.cdcConsumer.start().then(() => { this.logger.log('CDC event dispatcher started with transactional idempotency'); - } catch (error) { + }).catch((error) => { this.logger.error('Failed to start CDC event dispatcher', error); // 不抛出错误,允许服务在没有 Kafka 的情况下启动(用于本地开发) - } + }); } private async handleUserEvent(event: CDCEvent, tx: TransactionClient): Promise {