通过emqx_web_hook插件做设备在线/离线状态,请问有没有问题?

环境信息

  • EMQX 版本:4.4.1
  • 操作系统及版本:centos7
  • 其他

问题描述

emqx的文件介绍,可以将设备信息保存到mysql,redis等存储中,但是这些字段结构固定,不太满足真实的设备在线/离线状态查询,所以想通过emqx_web_hook插件实现设备在线/离线状态保存

实现逻辑:emqx_web_hook配置后(web.hook.url =http://huisen.nat300.top/mqtt/onLine),用户登录,或者离线都会调用该方法,因为设备登录mqtt的用户名称,就是设备mac唯一地址,从而记录该设备是否在线,或者离线

问题:这种方式实现有没有什么潜在的风险?比如:不能准确记录设备状态,或者出现一些其他问题等而达不到实现记录设备在线状态的预期?

重启emqx时,所有的设备均会掉线,此时不会通过这个插件。

你好,请问下,做设备在线,目前最好的方式是什么啊?

最好的方式还是通过规则引擎来做,触发事件时通过 webhook 或直接改写数据库(企业版支持)更新设备在线状态。

潜在的问题:

  • 因为网络断开离线:要等到 keepalive * 2 * 0.75 个周期后才能知道已经离线

规则引擎的弊端同样是 【关闭/重启emqx时。不会触发离线的钩子。导致数据不准确】

是的,严谨一点可以加一些其他逻辑,比如设备重连机制、节点重启时默认该节点设备全离线

其实还有另外一个担心,如果设备数量将多,比如:10000台,极端情况下,同时启动或同时关闭,这个并发量,emqx是否可以承受住?是否可以真实的触发10000次的离线或上线的事件触发?

这种情况主要取决于 webhook 或者数据库的吞吐能力

请问下,如果采用webhook来记录设备在线/离线状态,这样就会发起http请求,这个http接口就完全暴露,请问有什么办法,确保该接口安全呢?

推荐你使用 HTTPS 方式连接

系统都是采用https请求的,但是这个接口始终是暴露在外的,有没有其他更好的方法防止别人恶意请求插入数据呢

配置成 TLS 双向认证就可以了。