首页/网络/工控与物联网速查/MQTT共享订阅与负载分担
物联网协议60 条

MQTT共享订阅与负载分担

共享订阅把多个订阅者组成一个消费者组,同一条消息在组内只投给其中一个成员,用于横向扩展消费者。它改变了普通订阅的广播语义,不能替代需要每个订阅者都收到的场景。

工控与物联网速查网络更新于 2026-10-17
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌​​‌​‌‌‌‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌‌​‌‌​‌‌​‌​‌‌‌​​​‌​‌‌‌​‌​​​‌‌‌​‌​​​​‌​‌‌​‌​‌‌‌​​‌‌​‌‌​‌​​​​‌‌​​​​‌​‌‌‌​​‌​​‌‌​​‌​‌​‌‌​​‌​​​​‌​‌‌​‌​‌‌‌​​‌‌​‌‌‌​‌​‌​‌‌​​​‌​​‌‌‌​​‌‌​‌‌​​​‌‌​‌‌‌​​‌​​‌‌​‌​​‌​‌‌‌​​​​​‌‌‌​‌​​​‌‌​‌​​‌​‌‌​‌‌‌‌​‌‌​‌‌‌​​​‌​‌‌‌​​‌‌​‌​​​​‌‌‌​‌​​​‌‌​‌‌​‌​‌‌​‌‌​​

组内只投一份

普通订阅里每条消息会复制给所有订阅者;共享订阅在主题过滤器前加上共享前缀与组名,订阅同一组名的多个客户端构成一个消费者组,代理把每条消息只交给组内一个成员。不同组名之间相互独立,仍然各自收到一份。

语法示例

语法示例
# 语法:共享前缀 / 组名 / 主题过滤器
# 例:$share/workers/acme/shanghai/plc/+/telemetry
# 同一组名下的多个客户端构成消费者组,消息在组内分配
# 不同组名的客户端各自收到一份消息
# 不加共享前缀时为普通订阅,所有订阅者都收到

与普通订阅对照

维度普通订阅共享订阅
投递方式每个订阅者各收到一份组内只投给一个成员
扩展方式增加订阅者会成倍放大下行流量增加成员可分担处理压力
语义广播队列式消费
适用数据状态、通知、多消费者各自处理任务分发、数据入库等互斥消费

典型使用场景

  • 数据入库:多个写入实例分担同一批设备的遥测数据
  • 告警处理:多个处置服务竞争同一条告警,避免重复派单
  • 计算任务分发:把耗时的解析任务分给多个工作节点
  • 批量补偿:上线新的消费者组时与旧组并行运行,逐步切流
共享订阅在 5.0 规范中已有对应定义,但在早期版本中属于服务端扩展:不同实现对分组策略、未确认消息处理与持久会话配合方式差异较大,上线前要实测。
消费者组内成员全部离线时,消息不会因为共享订阅而变得可靠,仍取决于会话保持与服务端积压策略,需要一并设计。

易错点

  • 把需要广播的通知改成共享订阅:只有一台消费者收到,其余全部漏掉
  • 以为共享订阅自带高可用:成员全部离线时消息仍会积压或被丢弃
  • 同一组名跨环境复用:测试环境消费者抢走生产环境的消息
  • 共享组与主题权限不匹配:部分成员订阅失败且不易察觉,表现为负载严重偏斜
  • 把共享订阅当成集群的替代方案:消费者组只在单一代理范围内生效,跨代理仍需桥接或集群支持

数据来源与参考

  • OASIS MQTT Version 5.0 规范(共享订阅)
  • 主流 MQTT 代理共享订阅官方文档

整理校对:其其网ICT文档中心 · 本页地址:docs.qiqicto.com/ics/mqtt-shared-subscription.html

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌​​‌​‌‌‌‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌‌​‌‌​‌‌​‌​‌‌‌​​​‌​‌‌‌​‌​​​‌‌‌​‌​​​​‌​‌‌​‌​‌‌‌​​‌‌​‌‌​‌​​​​‌‌​​​​‌​‌‌‌​​‌​​‌‌​​‌​‌​‌‌​​‌​​​​‌​‌‌​‌​‌‌‌​​‌‌​‌‌‌​‌​‌​‌‌​​​‌​​‌‌‌​​‌‌​‌‌​​​‌‌​‌‌‌​​‌​​‌‌​‌​​‌​‌‌‌​​​​​‌‌‌​‌​​​‌‌​‌​​‌​‌‌​‌‌‌‌​‌‌​‌‌‌​​​‌​‌‌‌​​‌‌​‌​​​​‌‌‌​‌​​​‌‌​‌‌​‌​‌‌​‌‌​​