Files
Web_BLS_OldRcu_Heartbeat_Se…/bls-oldrcu-heartbeat-backend/spec/proposal.md

39 lines
1.2 KiB
Markdown
Raw Normal View History

# OpenSpec Proposal: bls-oldrcu-heartbeat-backend
## 功能概述
从 Kafka topic `blwlog4Nodejs-oldrcu-heartbeat-topic` 消费 OldRCU 心跳数据,
经过去重与批处理后upsert 写入 PostgreSQL G5 库的 `room_status.room_status_moment_g5` 表。
## 数据流
```
Kafka (blwlog4Nodejs-oldrcu-heartbeat-topic)
↓ 消费消息
Message Parser (提取 ts_ms, hotel_id, room_id, device_id)
↓ 投入缓冲
HeartbeatBuffer (Map, key=hotel_id:room_id, 每5秒flush)
↓ 批量写库
PostgreSQL G5 (room_status.room_status_moment_g5)
→ INSERT ON CONFLICT (hotel_id, room_id) DO UPDATE
→ SET ts_ms, device_id, online_status=1
```
## 关键约束
- **写库频率**每5秒最多写一次
- **去重策略**:同一 hotel_id+room_id 只保留 ts_ms 最大的记录
- **online_status**:每次写库强制置为 1
## npm 依赖
| 包名 | 版本策略 | 用途 |
|------|----------|------|
| kafka-node | ^5.0.0 | Kafka 消费 |
| pg | ^8.11.5 | PostgreSQL 连接池 |
| redis | ^4.6.13 | Redis 心跳/日志 |
| dotenv | ^16.4.5 | 环境变量 |
| node-cron | ^4.2.1 | 定时指标上报 |
| zod | ^4.3.6 | 消息Schema校验 |
## 目标数据库表
- Schema: `room_status`
- Table: `room_status_moment_g5`
- PK: `(hotel_id, room_id)`