功能介绍
MQTT 5.0 在保持发布订阅通信模型不变的前提下,提供了对 Request-Response 模式的标准化支持。该机制适用于需要在异步消息链路中表达“请求—响应”关系的场景,例如命令下发、状态查询、结果回执和服务协同。
MQTT 5 并未引入独立的“请求报文”或“响应报文”类型,请求和响应仍然通过 PUBLISH 报文承载。其核心做法是在消息属性中补充响应路径和关联信息,使通信双方能够在标准发布订阅模型下完成请求与响应的闭环。
Requester: 发布携带 ResponseTopic、Correlation Data 的 Publisher 客户端;
Responder: 订阅、处理消息,并对携带 ResponseTopic, Correlation Data 属性的消息生成响应消息(TopicName 为 ResponseTopic),发送回 MQTT Server,供 Requester 或其他订阅者进一步根据业务逻辑处理;
交互流程
MQTT 5 Request-Response 的典型交互流程如下:
1. Requester 订阅响应主题:请求方在发送请求前,应先订阅自身使用的响应主题。该步骤用于确保响应消息在返回时能够被及时接收。
2. Requester 发送请求消息:请求方通过 PUBLISH 发送请求,并在报文属性中携带:
Response Topic
Correlation Data(可选但推荐)
3. Responder 接收并处理请求:响应方订阅请求主题,收到请求后读取以下字段并随后执行业务处理逻辑
请求 payload
Response Topic
Correlation Data
4. Responder 返回响应消息:响应方通过 PUBLISH 将结果发送到 Response Topic 指定的主题。如请求中携带了 Correlation Data,响应方应在响应中原样附带,以便请求方完成匹配。
5. Requester 接收并关联响应:请求方从已订阅的响应主题中接收消息,并通过 Correlation Data 将响应与对应请求建立关联。
示例
请求消息
Topic: service/device/123/getProperties:Response Topic: client/a/replyCorrelation Data: 8f1c2d9aPayload:{"operation":"getStatus"}
响应消息
Topic: client/a/replyProperties:Correlation Data: 8f1c2d9aPayload:{"status":"online","temperature":36.5}
在该示例中:
请求主题用于表达处理目标
响应主题由请求方显式指定
关联标识用于在客户端侧完成请求与响应匹配
使用旧协议的存量设备兼容方案
对于 MQTT v5.0 的 Publisher、Subscriber, 可自行根据协议和业务情况,实现 Request Response;对于仅支持 v3.1、v3.1.1 的存量设备,腾讯云 MQTT 支持通过 Auto Response 功能, 由服务端代理 Responder 发送回执,实现统一的机制和方案。
对于 v3.1, v3.1.1 版本 Responder,开启自动回复后,处理流程如下:

服务端在收到低版本 Responder PubAck/PubComp 后,会根据预定义模板,生成一条回复消息,携带 CorrelationData,发送到 Requester 指定的 ResponseTopic。
使用说明
1. Responder Subscriber 需使用 QoS > 0 的方式订阅。
2. Auto Response 仅对 QoS 降级后,QoS > 0 的消息自动生成、发布响应消息。
3. 默认情况下,MQTT Server 仅对 Responder MQTT v3.1, v3.1.1 开启自动回复; v5.0 客户端优先自行按照协议规范实现 Request Response。
4. 自动回复消息说明:
Topic Name: 原消息 ResponseTopic 属性值
CorrelationData:原消息 Correlation Data 值
消息体,JSON 格式,包含以下字段
字段名称 | 说明 |
id | 存储唯一消息标识符 |
instanceId | 实例 ID |
publisherClientId | Requester 客户端标识符 |
subscriberClientId | Responder 客户端标识符 |
subscriberUsername | Responder 用户名 |
subscriberClientHost | Responder Client Host |
topic | 原消息 Topic Name |
qos | 投递 Responder QoS |
pubProps | Publish 到 Responder 时的属性 |
messageReceivedAt | MQTT Server 收到 Requester Publish 报文的时间, 自 Epoch 毫秒数 |