在MQTT中,subscription是允许客户端接收发往特定主题的消息的机制。 客户端订阅主题时,表示希望接收发往该主题的所有消息。
Subscriptions表
在Subscriptions页面,可查看、分析或筛选 broker上的所有订阅。 表包含每项订阅的以下信息:
- Client ID。 拥有该订阅的客户端标识符。
- Topic filter(主题过滤器)。MQTT主题过滤器。
- QoS。订阅的服务质量。
- Retain as Published。为true时,通过此订阅转发的消息保留其发布时的RETAIN标志。
- Retain Handling(保留消息处理)。该选项决定客户端订阅主题时broker如何处理保留消息。
- 0 - 在订阅时发送保留消息;
- 1 - 若订阅尚不存在,则在订阅时发送保留消息;
- 2 - 在订阅时不发送保留消息。
- No local。为true时,broker不会将来自此客户端的消息转发回进行该订阅的连接。
- Subscription Identifier(订阅标识符)。分配给订阅的唯一数值,用于客户端区分不同订阅的消息。
管理订阅
可从 “Session details” 窗口轻松添加、删除或编辑订阅。
- 在左侧菜单打开 “Subscriptions” 页面。
- 点击表行打开会话订阅详情。
- 添加、编辑或删除客户端订阅。
- 点击 “Update” 保存更改。
清空空订阅节点
Broker中的订阅使用 Trie 数据结构存储在内存中, 该结构以高效搜索著称。 Trie(亦称前缀树)是一种基于树的数据结构,可根据键或字符序列快速检索信息。
Trie以层级方式组织topic filters,每个节点表示topic filter的一个主题层级。 使用Trie结构,broker可根据发布消息提供的topic name快速定位和检索客户端订阅。 这确保客户端能及时收到感兴趣的消息,有助于提升broker的性能与响应速度。
当客户端订阅被删除(unsubscribe)时,broker从内存中移除数据并将节点标记为空。 随着时间推移,若删除大量订阅, broker内存中可能遗留大量空节点。 这些空节点会导致效率下降并浪费内存资源。
清空空订阅节点可释放内存资源,并可能提升broker性能, 因为空节点减少后,订阅匹配处理会更快。
清空空订阅节点:点击右上角 “Clear empty subscription nodes” 按钮(垃圾桶图标)并确认。
此外,broker通过调度器配置为定期清空空订阅节点。由以下环境变量控制:
MQTT_SUB_TRIE_CLEAR_NODES_CRON 和 MQTT_SUB_TRIE_CLEAR_NODES_ZONE。