
去年我们在一个12万㎡的商业综合体做能耗监测系统改造,踩过一次坑:整点抄表时段上千台表同时往服务端打数据,云函数SCF超时丢了一批,公区账单对不上,租户投诉直接炸了。后来改用消息队列CMQ做削峰才算稳下来。这篇文章把这套链路拆开讲讲。
商业综合体里餐饮、零售、办公、娱乐混在一起,楼层多、租户杂,公区照明空调和租户用电缠在一块。传统靠导轨式电能表和智能水电表人工抄,不仅人工抄表效率低,公区分摊电费不透明、电费纠纷难追溯也是常态。我们的思路是用CMQ先把设备上行数据接住,再慢慢算。
单栋楼少则几百、多则几千台合众致达智能水电表和导轨式电能表,15分钟上报一次,整点就是并发尖峰。三种方案我们实际比过:
维度 | 直接SCF调用 | Redis队列缓冲 | 消息队列CMQ |
|---|---|---|---|
峰值承载 | 受SCF并发配额限制 | 依赖Redis内存上限 | 分布式存储,自动扩容 |
数据可靠性 | 函数异常即丢失 | 内存故障有丢失风险 | 持久化存储,至少投递一次 |
消费顺序 | 无保障 | 单队列有序 | 分区有序,支持批量消费 |
运维成本 | 低 | 中(需维护Redis集群) | 低(全托管服务) |
结论很直接:CMQ扛尖峰最稳。Redis缓存高并发我们没丢掉,它更适合放热点查询的结果,和CMQ是互补关系,不是二选一。

设备侧以合众致达导轨式电能表和智能集中器为主,NB-IoT智能水表、LoRa无线水表、4G无线远传水表、预付费电表也能接进来。楼层支路先过RS485抄表网关汇聚,再用MQTT物联网协议上腾讯云IoT Hub。设备走DL/T645-2007协议和Modbus RTU通信,IoT Hub规则引擎把消息转给CMQ,而不是直接调SCF——这一层解耦救了命。
SCF作为消费者按批拉消息,干三件事:解析用量、判异常、算分摊。正常数据进时序数据库CTSDB做趋势,周期再长可以上时序数据库TDengine,计费结果落腾讯云MySQL/CDB供查账单。碰到大功率电器违规用电,SCF结合恶性负载检测和非侵入式负荷监测NILM判断,经API网关把告警推到管理端。
整点那上千台表一起上报也不怕,CMQ先吃下尖峰,SCF按自己的节奏消费,函数不会被冲垮。
商业综合体公区(大堂、电梯、中央空调)要按面积或约定比例摊到各租户。以前用Excel分摊,滞后还易错,是投诉重灾区。现在公区合众致达导轨式电能表和租户表进同一个CMQ队列,SCF按规则算出多租户水电独立结算金额,写CDB后经API网关同步到租户小程序,电费纠纷难追溯基本从根上断了。
配套加工区我们让边端协同计算在智能集中器本地先聚一批,只把汇总往CMQ送,云端压力又小一截。
这套打法不只在商业综合体好用。像公寓预付费水电方案里的易收租公寓管理平台、宿舍智能水电管控、长租公寓智能水电、保障房智能抄表都能套,拿来当远程预付费系统和智慧能源管理平台的数据底座也没问题,往上叠一层就是完整的能耗监测系统。
Q:商业综合体能耗管理为什么非得上CMQ削峰? 整点几百台表并发,直接触发函数大概率超时丢数。CMQ持久化存储扛并发、分区有序还能批量消费,SCF慢慢拉,不雪崩,数据也不丢。
Q:CMQ和Redis缓存高并发怎么分工? CMQ管设备上行数据的可靠削峰和解耦,Redis管高频查询的低延迟缓存。一个解决"写尖峰",一个解决"读热点",远程预付费系统里常一起用。
Q:导轨式电能表和智能集中器怎么接IoT Hub? 楼层支路经RS485抄表网关汇聚,设备用MQTT物联网协议注册IoT Hub,按DL/T645-2007协议和Modbus RTU通信上报,规则引擎转到CMQ,旧表不用改。
Q:老旧小区抄表改造能用这套吗? 能。NB-IoT智能水表、LoRa无线水表走物联网通信平台接IoT Hub和CMQ,旧表也能通过RS485抄表网关汇聚,不用整楼换表。
Q:非侵入式负荷监测NILM和恶性负载检测啥关系? NILM在边端认电器类型和功率特征,恶性负载检测拿这个判违规,SCF触发告警经API网关推,形成"识别—判定—告警"的闭环。
还是那个商业综合体,合众致达导轨式电能表加智能水电表接腾讯云IoT Hub,CMQ当核心。整点尖峰消息积压从秒级降到毫秒级,SCF批量消费吞吐涨了约3倍,数据零丢失。公区自动分摊上线后租户投诉掉超70%,人工抄表效率低的问题也顺带解决了。
CMQ在商业综合体能耗管理里就是个削峰解耦的缓冲层,配腾讯云IoT Hub、云函数SCF、时序数据库CTSDB、腾讯云MySQL/CDB组成完整链路。工厂车间用电监测、智慧园区能源管理、校园热水计费系统这类高密度设备场景,同样的思路都能搬
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。