EMQ-X 消息存储到数据库的四种方法
Posted 爱是与世界平行
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了EMQ-X 消息存储到数据库的四种方法相关的知识,希望对你有一定的参考价值。
使用EMQ-X 如何实现将设备上报上来的消息存储到数据库呢,方法很多,如下
一、EMQ-X Enterprise
购买EMQ-X企业版,有钱就用最省力的办法。
二、MQTT客户端订阅消息再转存数据库
方法:
- 后台开个超级权限的MQTT客户端
- 订阅所需的主题
- Qos设置成2,保证只接收一次,数据不会丢,也不会多
- 将接收到的消息存储到数据库
弊端:
这个方法是最简单的,目前在很多开源的物联网项目中看到都是这么用的,但是它的弊端也很明显。
- 设备数越多,订阅数越多,进来的消息也越多
- 只有一个Socket管道的MQTT客户端压力就会很大
- Socket本身就不稳定,在压力大的情况下,就更容易掉线重连
- 如果cleanSession true,则掉线后,离线期间的数据就永久丢失了
- 如果cleanSession false,则重连后,broker会再推送消息过来,这时候离线期间没收到的数据全来了,压力剧增又容易再次掉线,然后开始了一个可怕的死循环
进一步解决方法:
办法总比问题多,是个问题总能解决
- 一个MQTT客户端的压力大,那就分流到多个MQTT客户端
- 分流后的消息数据再引导kafka等数据处理框架中
引用别人的一张图
三、WebHook
了解WebHook之前需要先连接Hook,钩子 • EMQ X 使用文档
WebHook 对于事件的处理是单向的,它仅支持将 EMQ X 中的事件推送给 Web 服务,并不关心 Web 服务的返回。 借助 Webhook 可以完成设备在线、上下线记录,订阅与消息存储、消息送达确认等诸多业务。
四、插件
Enterprise实现数据存储的方式就是通过插件来实现的,而插件的核心又是钩子。
所以,看到这里大家就会很奇怪,那么WebHook和插件差别在哪呢。
- WebHook是在消息进来的某个钩子节点时,发送HTTP请求到某个Web服务,在Web服务里面执行我们想要的数据存储功能
- 插件是在消息进来的某个钩子节点时,插入一段代码,执行我们想要的数据存储功能
Enterprise就是通过插件来实现的
EMQ提供了插件开发功能,参考 emqx_plugin_template 插件模版创建新的插件项目。
所以,理论上我们也是可以做到的,只是可能有点难。而且插件没写好的话,可能比上述三个方法更惨,所以要谨慎。
五、总结
在money不富裕的情况下,个人建议是 WebHook > MQTT客户端订阅消息再转存数据库 > 插件
以上是关于EMQ-X 消息存储到数据库的四种方法的主要内容,如果未能解决你的问题,请参考以下文章