设备状态处于系统宕机或者重启之前的状态

Blade 未结 1 128
xiaoliu
xiaoliu 剑圣 2024-08-27 10:25

一、该问题的重现步骤是什么?

1. 是否应该考虑新增一个定时器,定时扫描所有设备状态并落库。因为考虑到有种情况:设备原先是在线状态,系统宕机或者重启后设备处于“离线”或者“禁用”状态,这时候如果没有定时器定时读取状态并落库,会导致页面上设备一直处于设备原先的状态。如下图,“kSoERsAnc***”开头的设备原先是在线状态,注释掉这个设备的代码并重启后相当于这个设备掉线了,页面依然处于“在线”状态(此时页面上应该显示“未激活”或者“异常”状态?甚至是否应该删除页面上的设备,因为注释的代码模拟的是设备没有了)。

image.png

image.png



二、你期待的结果是什么?实际看到的又是什么?

期待的结果:应该有定时器定时读取设备状态并落库。

实际看到的:设备的状态处于系统宕机或者重启之前的状态。


三、你正在使用的是什么产品,什么版本?在什么操作系统上?

正在使用的产品:BladeX物联网平台

版本:1.0.0

操作系统:Windows11


四、请提供详细的错误堆栈信息,这很重要。


五、若有更多详细信息,请在下面提供。

1条回答
  • 2024-08-27 11:11

    考虑到海量设备的场景,设备下线是走批量的,也就会有一个下线的延迟。你链接了设备,设备掉线后断开mqtt,broker服务端就会按顺序下线。

    你可以测试一下,在broker服务正常的时候,看他设备断开的日志。设备页你也可以f5刷新看看多久会自动掉线。

    另外你如果是重启了broker或者关闭了broker,这个是没法处理设备上下线了。服务端掉线会有一个心跳周期,下一个周期之前重启没问题,超时就不行了。

    379089eca71932d713efa1b290381bd8.png


    关于你说的定时任务是不可取的,海量设备的场景,会把系统直接搞崩。针对极端场景,比如broker挂掉很久,这是属于事故了,那设备也就相当于全部掉线了。重启服务后,手动更新所有设备离线就行。


    至于这种极端场景如何自动处理,这会放到后续的kafka组件来处理。当然你又会说kafka挂了怎么办,还是那句话,事故级别,手动处理,没有完美的方案。



    这个你也可以先了解一下:https://www.bilibili.com/video/BV1wv4y1F7Av/

    作者追问:2024-08-27 11:17

    ok

    0 讨论(0)
提交回复