fix(mining-admin-service): ignore Debezium heartbeat messages

- Add isHeartbeatMessage to detect heartbeat messages (only have ts_ms field)
- Skip processing for heartbeat messages to avoid unnecessary warnings

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
hailin 2026-01-12 07:44:27 -08:00
parent 30e1867eb0
commit bf5a16939f
1 changed files with 14 additions and 0 deletions

View File

@ -174,6 +174,11 @@ export class CdcConsumerService implements OnModuleInit, OnModuleDestroy {
const eventData = JSON.parse(message.value.toString());
const sequenceNum = BigInt(message.offset);
// 忽略 Debezium 心跳消息 (只有 ts_ms 字段)
if (this.isHeartbeatMessage(eventData)) {
return;
}
// 判断事件类型Debezium CDC 或 服务 Outbox 事件
if (this.isDebeziumEvent(eventData)) {
// Debezium outbox 事件:从 payload.after 提取服务事件
@ -198,6 +203,15 @@ export class CdcConsumerService implements OnModuleInit, OnModuleDestroy {
}
}
/**
* Debezium
* : { ts_ms: number }
*/
private isHeartbeatMessage(data: any): boolean {
const keys = Object.keys(data);
return keys.length === 1 && keys[0] === 'ts_ms';
}
private isDebeziumEvent(data: any): boolean {
return data.payload && data.payload.source && data.payload.op;
}