一、启动一个IotDB容器
bash
sudo docker run --rm -p 6667:6667 -p 2883:2883 -e enable_rest_service=true -e enable_mqtt_service=true -e mqtt_port=2883 --name iotdb apache/iotdb:1.3.2-standalone
重要参数解析:
1. 容器生命周期管理
--rm
- 容器停止后自动删除,避免积累未使用的容器
2. 网络端口映射
bash
-p 6667:6667 -p 2883:2883
-
-p 6667:6667
: 将容器内的 6667 端口映射到主机的 6667 端口- 6667 是 IoTDB 的默认 RPC 端口
-
-p 2883:2883
: 将容器内的 2883 端口映射到主机的 2883 端口- 2883 是 MQTT 服务端口
3. 环境变量配置
bash
-e enable_rest_service=true
-e enable_mqtt_service=true
-e mqtt_port=2883
-
启用 REST API 服务
-
启用 MQTT 协议支持
-
设置 MQTT 服务端口为 2883
二、设置存储组
bash
# 进入容器内部
docker exec -it iotdb bash start-cli.sh -h 127.0.0.1 -p 6667 -u root -pw root
# 设置存储组
set storage group to root.imooc;
三、在Emqx创建连接器,设置规则和添加动作
1、创建连接

连接器上填写的信息MQTT服务地址,为上面启动的Iotdb容器的服务器地址和端口,用户名和密码默认为root。填写好点击下方的测试连接,如果提示连接成功,则进入下一步。
2、设置规则

重点说下里面的SQL
sql
SELECT
clientid,
now_timestamp('millisecond') as now_ts_ms,
payload.charging as charging
FROM
"charge/stat"
FROM中的charge/stat为主题,payload.charging为发送的消息
编写完SQL可以启用调试,以验证是否正确

主题必须与SQL中from后面的主题保持一致,Payload也必须SQL中的payload点后面的值保持一致,编写完点击运行测试,如果无误,可以在输出结果中看到正常输出的结果。
3、添加动作

这里主要是选择连接器和主题,然后填写消息模板,消息模板要写对,否则消息无法保存到IotDB中。消息模板的示例:
sql
{
"device":"root.imooc.${clientid}",
"timestamp":${now_ts_ms},
"measurements":[
"charging"
],
"values":[
${charging}
]
}
device中root.imooc为IotDB中存储组的名称,measurements为payload的值,values需要提供数组的形式数据,为payload的值。
四、在mqttx上发送消息

五、验证消息
在emqx上查看消息是否命中

使用IotDB查询数据是否写入

从中可以看到数据已经写入到IotDB。