新闻中心

PRESS CENTER 纵横智控
你的位置: 首页 新闻 技术应用
纵横智控

内置缓存队列节点实现断网续传-EG网关

2025-09-10 11:00:09 阅读: 发布人:纵横智控

需求概述

本文主要实现的功能是:使用EG系列网关内置的缓存队列节点实现数据断网续传的功能。

本示例以MQTT通信为例:当MQTT连接正常时,数据直接上传;当MQTT连接异常时,采集数据缓存到缓存队列节点中,等MQTT连接恢复后,在按照先进先出(FIFO)的规则依次上传。

缓存队列节点将数据存储在网关内存中,因此无法持久化,掉电会丢失

准备工作

本案例由缓存队列节点实现。该节点的具体使用方法请参考:此处为语雀内容卡片,点击链接查看:https://iotrouter.yuque.com/org-wiki-iotrouter-rlzwv5/eg8000/bgp8fuouan9p49e7

为方便演示,下面使用注入节点模拟采集数据,演示缓存队列节点的工作原理。如下图所示:

1.当点击第一个注入节点时,模拟采集数据,点击一次表示采集一次数据,依次存储在缓存队列中,缓存队列节点下标显示当前存储的数据条数。同时,缓存队列默认1000毫秒释放一条数据。当注入频率大于释放频率时,缓存队列的数据条数会一直累加(生产者大于消费者)。

2.当点击第二个注入节点时,设置bypassInterval==0,表示缓存队列不在主动释放数据。注入的数据会在缓存队列中一直累加。

3.当点击第三个注入节点时,设置bypassInterval==1000,表示缓存队列继续以1000毫秒的间隔释放数据。

内置缓存队列节点实现断网续传-EG网关

需求实现

1. 实现原理

根据MQTT连接状态,设置缓存队列是否释放数据。其基本原理为:当MQTT连接正常时,缓存队列节点按照正常间隔依次释放数据,表示向MQTT服务器发布数据;当MQTT连接异常时,缓存队列不在释放数据,表示不向MQTT服务器发布数据。流程图如下所示:

内置缓存队列节点实现断网续传-EG网关

2. MQTT连接与状态监听

如下所示:建立MQTT连接,并使用监听节点监听MQTT连接状态。无论是连接建立还是连接断开,监听节点都能捕捉到状态的变化,因此示例添加了一个条件判断节点用于区分连接的建立还是断开。当连接建立时,设置bypassInterval=200,表示缓存节点正常释放数据;当连接断开时,设置bypassInterval=00,表示缓存节点不在释放数据,数据缓存在队列中。

此处为语雀视频卡片,点击链接查看:见文末

3. 采集数据

此处以采集Modbus传感器数据为例,将采集到的数据以Json格式上报。本文以介绍缓存为主,采集数据流程在此不过多赘述。

此处为语雀视频卡片,点击链接查看:见文末

此处函数代码:

var RS485_DATA = msg.payload

var time = Date.now()

 

var sendData = {

id: "16544",

time:time,

data: RS485_DATA

}

msg.payload = JSON.stringify(sendData);

return msg;

4. 借助缓存队列实现断点续传

按照下图所示,制作流程,观察效果。当MQTT连接断开时,缓存队列下标的数据一直累加,表明数据缓存在队列中;当MQTT连接成功时,缓存队列下标依次减少,表明依次释放缓存的数据。

此处为语雀视频卡片,点击链接查看:见文末

流程源码:https://iotrouter.yuque.com/zn3vdn/eg8000/vsw2y9mmkhxb0xw7

扩展延伸

本示例以采集Modbus传感器数据为例演示EG系列网关的断点续传功能。实际使用中,数据来源不限,通信方式也不限,主要目的在于熟悉缓存队列节点的使用方法。熟练掌握该节点的使用后,可以轻松实现各种断网续传的需求,例如:采集PLC数据TCP上报的断网续传等等。、

更多:采用时序数据库实现断网续传-EG网关-成都纵横智控

热门产品