EMQx & mosquitto订阅设备上下线信息

本文详细介绍了在CentOS系统上安装和配置Mosquitto MQTT服务器的过程,包括解压、编译、创建软链接及启动服务等步骤,并提供了订阅系统主题的方法。

安装mosquitto

解压

tar xfv mosquitto-1.6.2.tar.gz

进入目录

cd mosquitto-1.6.2

更改conf.mk文件

关闭ssl
在这里插入图片描述

编译

make install
如果是新的centos系统,先执行yum install gcc gcc-c++ libstdc+±devel

创建软连接

ln -s /usr/local/lib/libmosquitto.so.1 /usr/lib/libmosquitto.so.1
ldconfig

启动

mosquitto -d

订阅

mosquitto_sub -h 192.168.206.147 -v -t $SYS/brokers/+/clients/#
在这里插入图片描述
EMQx 安装
订阅系统主题时需要更改etc文件夹下的acl.conf,允许订阅系统主题。

<think> 我们正在讨论EMQX中通配符订阅的使用方法。根据用户的问题,他明确想了解EMQX订阅信息使用通配符的方法。 在EMQX(一种广泛使用的MQTT代理)中,通配符订阅允许客户端订阅匹配多个主题的消息。EMQX支持两种通配符:`+`(单级通配符)和`#`(多级通配符)。 下面详细说明: 1. **单级通配符 `+`**: - 代表一个层级的任意内容 - 例如:订阅 `sensor/+/temperature` 可以匹配: - `sensor/room1/temperature` - `sensor/room2/temperature` - 但不能匹配 `sensor/room1/section1/temperature`(因为`+`只能代替一个层级) 2. **多级通配符 `#`**: - 代表零个或多个层级,必须放在主题的末尾 - 例如:订阅 `sensor/#` 可以匹配: - `sensor/temperature`(零个后续层级) - `sensor/room1/temperature`(一个后续层级) - `sensor/room1/section1/temperature`(多个层级) 3. **使用规则**: - 通配符只能用于订阅,不能用于发布消息。 - 主题层级分隔符是`/`,通配符必须占据整个层级(例如`+`或`#`,不能部分使用)。 - 多级通配符`#`只能出现在主题末尾,前面必须有`/`(除非是整个主题)。例如,`sensor#`是无效的,而`sensor/#`是有效的。 4. **示例**: - 订阅所有网关的`addResponse`消息:`/v1/devices/+/topo/addResponse` - 订阅某个网关下所有子设备的操作响应:`/v1/devices/GW123/topo/#`(注意:这里用具体网关ID替换了GW123,并且用`#`匹配所有后续层级) 5. **注意事项**: - 权限控制:通配符订阅可能需要相应的ACL规则授权[^1]。 - 性能:过度使用通配符(特别是多级通配符)可能会影响性能,因为它会匹配大量主题。 6. **实际操作示例(Python)**: 使用`paho-mqtt`库进行订阅: ```python import paho.mqtt.client as mqtt def on_connect(client, userdata, flags, rc): # 订阅所有网关的addResponse client.subscribe("/v1/devices/+/topo/addResponse") # 订阅特定网关的所有topo相关消息 client.subscribe("/v1/devices/GW123/topo/#") client = mqtt.Client() client.on_connect = on_connect client.connect("emqx_broker", 1883, 60) client.loop_forever() ``` 7. **通配符匹配规则总结**: | 通配符 | 位置 | 匹配范围 | 示例 | |--------|------------------|------------------|-----------------------------------| | `+` | 任意位置 | 单一级别 | `+/temp` 匹配 `room1/temp` | | `#` | 主题末尾 | 零或多个级别 | `sensors/#` 匹配 `sensors/` 下的所有子主题 | 8. **限制**: - 通配符不能相邻使用(如`++`或`+#`是非法的)。 - 主题不能以`/`开头(除非是根主题),但EMQX通常允许以`/`开头(如示例中的主题)。 9. **相关问题**: 1. 如何在EMQX中配置ACL规则以控制通配符订阅权限? 2. EMQX中通配符订阅的性能影响如何评估? 3. 在MQTT协议中,通配符订阅与普通订阅有何本质区别? 4. EMQX企业版中通配符订阅有哪些增强功能? 参考文档:EMQX官方文档关于主题和通配符的部分[^2]。 [^1]: EMQX访问控制列表(ACL)可以基于客户端ID、用户名等限制通配符订阅权限。 [^2]: [EMQX MQTT主题和通配符](https://www.emqx.io/docs/zh/v5.0/messaging/mqtt-topic-and-wildcard.html) </think> ### EMQX 订阅通配符使用方法详解 在 EMQX(开源 MQTT 代理)中,通配符订阅是通过主题过滤器实现的,支持两种标准通配符: #### 1. **单级通配符 `+`** - 匹配**单个层级**的任意字符 - 示例: - 订阅 `sensor/+/temperature` - 匹配: - ✅ `sensor/room1/temperature` - ✅ `sensor/room2/temperature` - ❌ `sensor/room1/section/temperature`(层级不匹配) #### 2. **多级通配符 `#`** - 匹配**零个或多个层级**的任意字符 - **必须放在主题末尾** - 示例: - 订阅 `sensor/#` - 匹配: - ✅ `sensor/temperature` - ✅ `sensor/room1/temperature` - ✅ `sensor/room1/section/humidity` #### 3. **使用场景示例** ```python # 订阅所有网关的 addResponse 消息 client.subscribe("/v1/devices/+/topo/addResponse") # 订阅特定网关下的所有子设备消息 gateway_id = "GW2024" client.subscribe(f"/v1/devices/{gateway_id}/#") # 订阅所有设备的状态更新 client.subscribe("device/+/status/#") ``` #### 4. **使用规则与限制** 1. **层级分隔符**:必须使用 `/` 分隔主题层级 2. **位置限制**: - `+` 可出现在任意位置:`a/+/c` - `#` **必须末尾使用**:`a/b/#`(✅) vs `a/#/c`(❌) 3. **性能影响**:多级通配符 `#` 比单级通配符 `+` 更消耗资源 4. **权限控制**:通配符订阅需配置 ACL 规则授权[^1] #### 5. **通配符匹配优先级** | 主题类型 | 示例 | 订阅优先级 | |----------------|---------------------------|------------| | 具体主题 | `sensor/room1/temp` | 最高 | | 单级通配符 | `sensor/+/temp` | 中 | | 多级通配符 | `sensor/#` | 最低 | #### 6. **调试建议** 1. 使用 EMQX Dashboard 的 **WebSocket 工具**实时测试通配符 2. 启用 **$SYS 系统主题**监控通配符订阅状态: ```bash $SYS/brokers/${node}/clients/${clientid}/subscriptions ``` 3. 限制通配符范围避免过度订阅:`factory/+/machine/#` 优于 `#` > 通配符是 MQTT 协议的核心特性,合理使用可显著简化设备管理[^2] --- ### 相关问题 1. EMQX 中如何配置 ACL 规则限制通配符订阅权限? 2. 通配符订阅在物联网设备管理中有哪些典型应用场景? 3. EMQX 企业版在通配符处理上有哪些性能优化? 4. 如何监控 EMQX 中通配符订阅的资源消耗? [^1]: EMQX 访问控制列表(ACL)通过规则控制客户端订阅权限 [^2]: MQTT 3.1.1 协议规范第 4.7 节定义通配符标准语法
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值