EMQX开源版 消息转存方法

5 篇文章 0 订阅

参考:https://huaweicloud.csdn.net/637ef707df016f70ae4cae49.html

1、MQTT客户端订阅消息再转存数据库

方法:

  1. 后台开个超级权限的MQTT客户端

  1. 订阅所需的主题

  1. Qos设置成2,保证只接收一次,数据不会丢,也不会多

  1. 将接收到的消息存储到数据库

弊端

这个方法是最简单的,目前在很多开源的物联网项目中看到都是这么用的,但是它的弊端也很明显。

  1. 设备数越多,订阅数越多,进来的消息也越多

  1. 只有一个Socket管道的MQTT客户端压力就会很大

  1. Socket本身就不稳定,在压力大的情况下,就更容易掉线重连

  1. 如果cleanSession true,则掉线后,离线期间的数据就永久丢失了

  1. 如果cleanSession false,则重连后,broker会再推送消息过来,这时候离线期间没收到的数据全来了,压力剧增又容易再次掉线,然后开始了一个可怕的死循环

进一步解决方法

办法总比问题多,是个问题总能解决

  1. 一个MQTT客户端的压力大,那就分流到多个MQTT客户端

  1. 分流后的消息数据再引导kafka等数据处理框架中

2、WebHook

WebHook • EMQ X 使用文档

了解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
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值