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:
parent
30e1867eb0
commit
bf5a16939f
|
|
@ -174,6 +174,11 @@ export class CdcConsumerService implements OnModuleInit, OnModuleDestroy {
|
||||||
const eventData = JSON.parse(message.value.toString());
|
const eventData = JSON.parse(message.value.toString());
|
||||||
const sequenceNum = BigInt(message.offset);
|
const sequenceNum = BigInt(message.offset);
|
||||||
|
|
||||||
|
// 忽略 Debezium 心跳消息 (只有 ts_ms 字段)
|
||||||
|
if (this.isHeartbeatMessage(eventData)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
// 判断事件类型:Debezium CDC 或 服务 Outbox 事件
|
// 判断事件类型:Debezium CDC 或 服务 Outbox 事件
|
||||||
if (this.isDebeziumEvent(eventData)) {
|
if (this.isDebeziumEvent(eventData)) {
|
||||||
// Debezium outbox 事件:从 payload.after 提取服务事件
|
// 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 {
|
private isDebeziumEvent(data: any): boolean {
|
||||||
return data.payload && data.payload.source && data.payload.op;
|
return data.payload && data.payload.source && data.payload.op;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue