EMQX开源版 消息转存方法
参考:https://huaweicloud.csdn.net/637ef707df016f70ae4cae49.html
1、MQTT客户端订阅消息再转存数据库
方法:
后台开个超级权限的MQTT客户端
订阅所需的主题
Qos设置成2,保证只接收一次,数据不会丢,也不会多
将接收到的消息存储到数据库
弊端:
这个方法是最简单的,目前在很多开源的物联网项目中看到都是这么用的,但是它的弊端也很明显。
设备数越多,订阅数越多,进来的消息也越多
只有一个Socket管道的MQTT客户端压力就会很大
Socket本身就不稳定,在压力大的情况下,就更容易掉线重连
如果cleanSession true,则掉线后,离线期间的数据就永久丢失了
如果cleanSession false,则重连后,broker会再推送消息过来,这时候离线期间没收到的数据全来了,压力剧增又容易再次掉线,然后开始了一个可怕的死循环
进一步解决方法:
办法总比问题多,是个问题总能解决
一个MQTT客户端的压力大,那就分流到多个MQTT客户端
分流后的消息数据再引导kafka等数据处理框架中
2、WebHook
了解WebHook之前需要先连接Hook,钩子 • EMQ X 使用文档
WebHook 对于事件的处理是单向的,它仅支持将 EMQ X 中的事件推送给 Web 服务,并不关心 Web 服务的返回。 借助 Webhook 可以完成设备在线、上下线记录,订阅与消息存储、消息送达确认等诸多业务。
3、插件
Enterprise实现数据存储的方式就是通过插件来实现的,而插件的核心又是钩子。
所以,看到这里大家就会很奇怪,那么WebHook和插件差别在哪呢。
WebHook是在消息进来的某个钩子节点时,发送HTTP请求到某个Web服务,在Web服务里面执行我们想要的数据存储功能
插件是在消息进来的某个钩子节点时,插入一段代码,执行我们想要的数据存储功能
Enterprise就是通过插件来实现的
EMQ提供了插件开发功能,参考 emqx_plugin_template 插件模版创建新的插件项目。
所以,理论上我们也是可以做到的,只是可能有点难。而且插件没写好的话,可能比上述三个方法更惨,所以要谨慎。
4、总结
在考虑费用的情况下,建议的方案选择顺序是: WebHook > MQTT客户端订阅消息再转存数据库 > 插件
更多推荐
所有评论(0)