概述
消息队列 MQTT 版支持通过主动查询和客户端事件两种方式来获取 MQTT 客户端在线状态。
原理介绍
消息队列 MQTT 版提供以下两种方式查询客户端在线状态:
方式 | 说明 | 使用场景 | 差异对比 |
主动查询 | 实例开放 RESTful API,实时查询客户端在线状态。 | 1. 业务流程中需要根据客户端是否在线决定后续运行逻辑。 2. 运维过程需要判断特定客户端当前是否在线。 | 主动查询是查询当前客户端的实时状态,相比上下线事件通知的方式更精确。 |
客户端事件 | 使用消息通知,在客户端上线和下线事件触发时,MQTT 服务端产生对应事件并发布到对应系统主题中, 业务应用可以根据需要订阅相关事件消息。 该方式属于异步感知客户端的状态,且感知到的是上下线事件,而非在线状态,云端应用需要根据事件发生的时间序列分析出客户端的状态。 | 1. 业务需要在客户端上线或者下线时触发一些预定义的动作。 2. 业务需要对客户端的上下线数据进行统计分析,并根据客户端的在线状态推送消息。 | 客户端采用消息解耦,状态判断更加复杂,且误判可能性更大(最终一致性)。虽然存在一定复杂度和误判概率,但更加适合大规模的客户端的状态统计。 |
使用方法
主动查询
请求示例
通过以下 RESTful API 进行查询:
curl --header "Authorization: Basic dXNlcjA6c2VjcmV0MA==" https://${instance-access-point}/client-id/${client-id}/status
请求参数说明:
变量 | 语义 | 示例值 |
${instance-access-point} | 实例接入点地址,从控制台的 集群管理 > 基本信息页面获取。 | mqtt-xxxx-gz-public.mqtt.tencenttdmq.com |
${client-id} | 需要查询的目标 client-id,具体规范定义可参见 | VIN0000001 |
返回的 Status Code 说明:
1. 支持 HTTP Method: GET/POST。
2. 支持 HTTP/HTTPS。
3. 通过 HTTP Basic Authentication实现认证, 参见 Basic Authentication。
4. 认证、授权:用户名和密码必须合法,且该账户必须有 CONNECT 权限。
5. HTTP 响应:
HTTP Status Code(状态码) | 描述 |
200 | 请求正常。 |
401 | 认证失败,用户名或者密码不正确。 |
403 | 鉴权失败,缺少 CONNECT 权限。 |
429 | 流控,Too Many Requests。 |
输出示例
如果请求正常处理,返回以下内容:
{
"online"
:
true
}
输出参数说明:
参数 | 说明 |
online | 客户端在线状态。 true:在线。 false:不在线。 |