通过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}]
}

测试连接,创建,全部完成

官方文档:

规则引擎 | EMQX 文档

数据集成 | EMQX 文档

连接器 | EMQX 文档

 

posted @ 2025-11-26 15:39  dirgo  阅读(2)  评论(0)    收藏  举报