MQTT 5.0 新特性
MQTT 5.0 = 在保留核心 Pub/Sub 的前提下,大幅增强可诊断性、可扩展性、大规模与互操作
正式标准:https://docs.oasis-open.org/mqtt/mqtt/v5.0/os/mqtt-v5.0-os.html
批准日期:2019-03-07
规范自述的功能目标包括:增强错误报告、共享订阅、消息过期、主题别名、用户属性、增强认证、流控等。
1. 为什么需要 5.0
3.1.1 的痛点:
- 失败时常只看到很粗的返回码
- 大消息/慢消费者缺少标准化流控
- 请求/响应模式要自己约定
- 元数据只能塞进 Payload
5.0 用 Reason Code + Properties 系统化解决。
2. Reason Code
几乎所有确认/断开报文可携带 Reason Code:
- 成功 / 各类失败原因更细
- DISCONNECT 可说明“为什么踢你”
- SUBACK 可按订阅项返回结果
排障价值极高:少猜、多读码。
3. Properties(属性)
控制报文可带属性列表,重要者包括:
| 属性 | 用途 |
|---|---|
| Session Expiry Interval | 会话保留多久 |
| Message Expiry Interval | 消息过期 |
| Content Type | 载荷类型提示 |
| Response Topic / Correlation Data | 请求-响应 |
| Subscription Identifier | 订阅标识,回调分流 |
| Topic Alias | 用短别名降低重复主题开销 |
| User Property | 任意键值元数据(UTF-8) |
| Receive Maximum | 未确认 QoS1/2 上限 |
| Maximum Packet Size | 包大小上限 |
| Server Keep Alive | 服务端可覆盖 Keep Alive |
| Authentication Method/Data | 增强认证 |
4. 共享订阅
$share/{ShareName}/{TopicFilter}
组内负载均衡,见 01-主题与发布订阅模型.md。
5. 请求 / 响应模式
标准化字段:
- Response Topic:响应发到哪里
- Correlation Data:把响应对回请求
不必再靠私有约定“reply_to”塞进 JSON(当然仍可并存)。
6. 主题别名(Topic Alias)
对高频、长 Topic:
- 首次 PUBLISH 带完整 Topic + Alias
- 后续只用 Alias
显著降低带宽(对受限网络友好)。
7. 增强认证(AUTH)
除用户名密码外,支持多步认证交换(SASL 风格思路):
- CONNECT 声明 Authentication Method
- 后续 AUTH 报文往返
适合企业身份源、令牌刷新、更强质询应答。
8. 负反馈与“服务端能力”
CONNACK 可告知:
- 服务器支持的最大 QoS、最大包长、是否保留可用、共享订阅是否可用等
Client 应按 CONNACK 调整行为,而不是假设所有 Broker 能力相同。
9. 迁移建议
| 策略 | 说明 |
|---|---|
| 双栈 Broker | Mosquitto/EMQX/HiveMQ CE 等多同时支持 3.1.1 与 5.0 |
| 新服务优先 5.0 | 直接受益于 Reason Code / 属性 |
| 旧设备保留 3.1.1 | 通过 Broker 互通(注意特性降级) |
| 桥接注意 | 5.0 属性跨桥可能丢失,需测 |
下一篇:05-安全与认证.md
正在加载留言…