请求与响应(Request Response)

最近更新时间:2026-04-21 09:52:32

我的收藏

功能介绍

MQTT 5.0 在保持发布订阅通信模型不变的前提下,提供了对 Request-Response 模式的标准化支持。该机制适用于需要在异步消息链路中表达“请求—响应”关系的场景,例如命令下发、状态查询、结果回执和服务协同。
MQTT 5 并未引入独立的“请求报文”或“响应报文”类型,请求和响应仍然通过 PUBLISH 报文承载。其核心做法是在消息属性中补充响应路径和关联信息,使通信双方能够在标准发布订阅模型下完成请求与响应的闭环。

MQTT 5.0 协议引入 Request / Response 机制, 该机制定义了 Requester、Responder 两个角色。
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/get
Properties:
Response Topic: client/a/reply
Correlation Data: 8f1c2d9a
Payload:
{"operation":"getStatus"}

响应消息

Topic: client/a/reply
Properties:
Correlation Data: 8f1c2d9a
Payload:
{"status":"online","temperature":36.5}
在该示例中:
请求主题用于表达处理目标
响应主题由请求方显式指定
关联标识用于在客户端侧完成请求与响应匹配
在这里获取示例代码

使用旧协议的存量设备兼容方案

对于 MQTT v5.0 的 Publisher、Subscriber, 可自行根据协议和业务情况,实现 Request Response;对于仅支持 v3.1、v3.1.1 的存量设备,腾讯云 MQTT 支持通过 Auto Response 功能, 由服务端代理 Responder 发送回执,实现统一的机制和方案。
如果 Requester 使用 v3.1, v3.1.1协议,可通过 消息增强规则在服务端动态添加 Response Topic、Correlation Data 等 MQTT 5.0 定义的属性;
对于 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 毫秒数