一、该问题的重现步骤是什么?
边缘计算mqtt监听会自动断开,不再监听,必须重新部署才会有数据,这个是因为什么?
3.
二、你期待的结果是什么?实际看到的又是什么?
数据一直在传递
三、你正在使用的是什么产品,什么版本?在什么操作系统上?
物联网平台,window
四、请提供详细的错误堆栈信息,这很重要。
五、若有更多详细信息,请在下面提供。
是只有一个mqtt连接还是有多个,如果只有一个mqtt连接会自动断开的话,你部署一个原版的node-red,然后来监听mqtt,看看原版的会不会也断开。
原版下载地址:https://github.com/node-red/node-red
注:原版没有数据库读取,是文件形式单独创建的,底层功能一样
这个可以先不考虑,还有就是我的数据是每10秒保存数据库一次,但是保存的数据时间与当前时间一直在拉大,就是数据在排队保存,没法做到数据库实时数据展示
而且数据与实际数据时间差一直在拉大,有什么多线程或者其他方法来解决这种情况吗?
我的限制信息速率10秒,中间数据不要,只要首尾数据,实时保存到数据库,传递过来的数据时间都是当前时间的,但是数据库保存的最新数据还是4分钟之前的
你的意思是限制了10秒一条数据,但是存到数据库的最新数据还是4分钟之前的么?你把速率限制先取消,看看入库的数据是多少。感觉像是来的所有数据都是在进行排队,不会进行筛选,10秒入库一条数据,等时间久了,排队入库的数据依旧是很久之前的。
这个速率的逻辑,你尝试用一个function节点来实现逻辑,在function节点内可以写对应逻辑。大概逻辑是这样的(没经过验证,需要调试)
1. 设置全局变量记录时间:你可以使用一个全局变量来记录上一次保存数据的时间。
2. 检查时间间隔:在接收到每条数据时,检查当前时间与上次保存时间的间隔。
3. 保存数据:如果超过了10秒,则保存这条数据,并更新记录时间的全局变量
// 获取当前时间
let now = new Date();
// 从全局变量中获取上次保存数据的时间
let lastSaved = flow.get('lastSavedTime') || new Date(now.getTime() - 10000);
// 计算时间差,单位为毫秒
let diff = now - lastSaved;
// 检查是否已经超过10秒
if (diff >= 10000) {
// 保存数据逻辑(这里假设你是将msg.payload保存到数据库)
// 你需要根据实际情况调整这部分逻辑,例如调用数据库写入函数等
node.send(msg); // 发送数据到下一个节点(例如数据库节点)
// 更新上次保存时间
flow.set('lastSavedTime', now);
} else {
// 如果没有超过10秒,不做任何操作
return null; // 不发送任何数据
}
确实是限制速率的问题,去掉之后,数据实时传递到数据库了,谢谢,我改用逻辑试一下
扫一扫访问 Blade技术社区 移动端