通过EMQX转发MQTT消息存入iotDB数据库
需求原因:
iotDB自带mqtt broker可以实现向其发消息直接存入,但这样存在几个问题:第一最重要的,过于耦合,iotDB挂了则mqtt broker也挂,第二:既有的设备有固定格式,iotDB解决方法是需要写Java代码,然后打包,然后替换原项目文件,不够灵活。
解决方法:
EMQX 提供了 规则引擎 和 数据集成 功能
企业版的可以直接 创建 iotdb类型的连接器,直接通过EMQX写入iotdb
然而 大部分热衷开源(白嫖)的公司,会选择使用开源版(再次特别指出:实际上无版权限制的只有5.8及以前版本),则 连接器只有 【mqtt服务】和【http服务】两个类型的连接器。
其实也不是不能用:方法就是 创建 mqtt连接器 连接到 iotdb的mqtt broker ,即等于让emqx转发一下,实现了解耦,并且 可以利用 emqx 的规则引擎,对数据格式进行转换,比较灵活。
大体流程说一下,详细的可以参考emqx的文档:
1.登录emqx的控制台,端口默认是:18083,默认用户名admin,密码public,下面操作菜单不同版本可能不同,笔者为 5.8.8开源版
2.创建连接器:转到菜单:集成——连接器
点击 创建 ,选择 【mqtt服务】,点击下一步,
填写 iotdb 的broker 的连接 地址,用户名密码(即iotdb数据库的用户名密码)等
特别注意:高级设置里的【桥接模式】不要开,刚配置的时候踩的坑,不知道什么时候不小心点开了,结果怎么也连不上
静态客户端 ID 映射表 不是必须,可以不配置
点击【测试连接】测试与iotdb mqtt broker连接上
点击 【创建】,至此 连接器 创建完成
3.创建规则:转到菜单:集成——规则
点击 创建
左侧 sql编辑器,可以对原mqtt消息进行格式转换等,具体使用见官方文档
最重要的是右侧——选择【动作输出】,
点击 添加动作 按钮
动作类型选择 【mqtt服务】,连接器 一项选择 2 里建好的连接器
主题即发给iotdb的主题,经测试 任何主题都可以
消息模板即 发给iotdb的mqtt消息,可以结合sql编辑器进行格式转换,下面一个例子:
{ "device": "root.hgqydb.${payload.pdid}", "timestamp": ${payload.timestamp}, "measurements": ["weight", "flow","speed"], "values": [${payload.weight}, ${payload.flow},${payload.speed}] }
测试连接,创建,全部完成
官方文档:

浙公网安备 33010602011771号