Appearance
部署MQTT工具
MQTT协议广泛应用于物联网通信。本工具将创建MQTT服务器,并连接会众云平台及第三方软硬件平台,实现两个平台相互之间的通信
1.创建配置文件:mqtt.json
配置参数说明
bash
USERNAME # 【必填】mqtt协议的用户名
PASSWORD # 【必填】mqtt协议用户名对应的密码
MQTT_PORT # 【可选】mqtt协议端口号,默认为:1883
HTTP_PORT # 【可选】http协议端口号,默认为:80
WHITE_IPS # 【可选】ip白名单,仅在白名单内的ip被允许访问(不配置则允许所有ip访问)
SUBSCRIBE_LIST # 【必填】订阅地址列表(会将对应topic的消息转发给指定的URL,这个URL链接由会众云平台的webhook工作流自动生成)文件内容示例
json
{
"USERNAME": "test",
"PASSWORD": "123",
"MQTT_PORT": 1883,
"HTTP_PORT": 80,
"WHITE_IPS": ["192.168.151.1", "192.168.151.2"],
"SUBSCRIBE_LIST": [
{
"TOPIC": "topic1",
"URL": "https://apaas-data.ysyoungth.com/00001_api/webhook/MVf832oAbo05j-ZWgp7THEJ60XT-1"
},
{
"TOPIC": "topic2",
"URL": "https://apaas-data.ysyoungth.com/00001_api/webhook/MVf832oAbo05j-ZWgp7THEJ60xy-1"
}
]
}注意
订阅地址列表是通过会众云平台webhook工作流自动生成的地址,节点json参数结构由调用方提供
建议调测阶段将webhook触发节点json参数设置为空字符串""(以接收所有参数)
特别说明
订阅地址列表中的TOPIC支持通配符,具体规则如下:
- 单层通配符
+
作用:匹配主题路径中
单层任意值,占用一个完整层级
假设订阅TOPIC为topic1/+/temp,则规则如下:
| 匹配主题 | 是否匹配 | 说明 |
|---|---|---|
| topic1/dev1/temp | ✅ | dev1 与 + 匹配 |
| topic1/dev2/temp | ✅ | dev2 与 + 匹配 |
| topic1/dev2/temp/temp2 | ❌ | dev2 与 + 匹配,但 temp2 匹配不上 |
| topic1/dev2 | ❌ | dev2 与 + 匹配,但匹配不上 temp |
- 多层通配符
#
作用:匹配主题路径中的任意层级(必须作为主题的最后一个字符)
假设订阅TOPIC为topic2/#,则规则如下:
| 匹配主题 | 是否匹配 | 说明 |
|---|---|---|
| topic2 | ✅ | 可以匹配空层级 |
| topic2/dev1 | ✅ | dev1 与 # 匹配 |
| topic2/dev1/temp | ✅ | dev1/temp 与 # 匹配 |
| topic3/dev1 | ❌ | topic3 与 topic2 不匹配 |
1.1.一键创建
下方参数后,将其复制粘贴至命令行,敲击回车键即可
bash
cat > /etc/hzy/mqtt.json <<- EOF
{
"USERNAME": "test",
"PASSWORD": "123",
"MQTT_PORT": 1883,
"HTTP_PORT": 80,
"WHITE_IPS": ["192.168.151.1", "192.168.151.2"],
"SUBSCRIBE_LIST": [
{
"TOPIC": "topic1",
"URL": "https://apaas-data.ysyoungth.com/00001_api/webhook/MVf832oAbo05j-ZWgp7THEJ60XT-1"
},
{
"TOPIC": "topic2",
"URL": "https://apaas-data.ysyoungth.com/00001_api/webhook/MVf832oAbo05j-ZWgp7THEJ60xy-1"
}
]
}
EOF如何验证执行结果?
命令行输入:cat /etc/hzy/mqtt.json,后敲击回车键即可查看文件内容
1.2.手动创建
bash
cd /etc/hzy && vim -n mqtt.json注意
将使用vim编辑文件内容,点击查看vim的使用说明
2.运行MQTT服务
启动服务
注意
必须使用 --network host 模式启动容器,否则无法获取到客户端ip,ip白名单无法生效
bash
docker run --privileged -e TZ=Asia/Shanghai -itd --restart always --network host -v /etc/hzy:/root/conf --name hzy-mqtt registry.cn-hangzhou.aliyuncs.com/hzy0code/hzy-utils:mqtt.x86.1.1.0bash
docker run --privileged -e TZ=Asia/Shanghai -itd --restart always --network host -v /etc/hzy:/root/conf --name hzy-mqtt registry.cn-hangzhou.aliyuncs.com/hzy0code/hzy-utils:mqtt.arm.1.1.0重启服务
注意
修改了配置文件后,需要使用以下命令重启服务
bash
docker restart hzy-mqtt3.主动发送请求
当需要主动发送请求给MQTT服务时,可以使用以下接口
接口描述
- 方法: POST
- URL:/send_msg
- 参数
- topic:主题
- message:发送的消息内容
- 返回:成功返回
success
请求示例
POST http://192.168.123.1/send_msg
json
{
"topic": "topic1",
"message": "test send massage"
}