tencent cloud

消息队列 MQTT 版

动态与公告
新功能发布记录
产品简介
TDMQ 产品系列介绍与选型
什么是消息队列 MQTT 版
应用场景
技术架构
产品系列
MQTT 协议兼容说明
开源对比
高可用
产品约束与使用配额
基本概念
开服地域
购买指南
计费概述
续费说明
查看消费明细
欠费说明
退费说明
快速入门
入门流程指引
准备工作
公网接入
VPC 网络接入
用户指南
使用流程指引
配置账号权限
新建集群
管理 Topic
连接集群
查询消息
管理客户端
管理集群
查看监控和配置告警
数据集成
集成数据到云函数 SCF
集成数据到 CKafka
集成数据到 RocketMQ
开发指南
MQTT 5 高级特性
数据面 HTTP 接口说明
配置自定义域名
配置 SQL 过滤
配置点对点订阅
MQTT over QUIC
管理客户端订阅
消息增强规则
实践教程
MQTT 客户端开发注意事项
可观测能力
Topic 与通配符订阅
API 参考
History
Introduction
API Category
Making API Requests
Cluster APIs
Topic APIs
Authorization Policy APIs
User APIs
Client APIs
Message Enhancement Rule APIs
Message APIs
Data Types
Error Codes
SDK 参考
接入点格式
Java SDK
C SDK
Javascript/Node.JS/小程序
Go SDK
iOS SDK
JavaScript SDK
Dart SDK
Python SDK
.NET
安全与合规
权限管理
常见问题
相关协议
隐私协议
数据处理和安全协议
消息队列 MQTT 版服务等级协议
联系我们

查询客户端事件

PDF
포커스 모드
폰트 크기
마지막 업데이트 시간: 2026-01-30 15:10:02

什么是客户端事件?

客户端事件是指在 MQTT 协议通信过程中,客户端会触发的一系列状态变化和交互通知。通过追踪系统事件,可以帮助用户及时排查定位分析问题,保障系统稳定性。

事件举例说明

一个管理大量 IoT 设备的挑战,就是在设备离线时如何及时应对。设计良好的业务系统通常需要检视并归类设备离线原因,然后激活对应的预案措施。
为了实现这样的业务目标,业务应用可以订阅 $events/client_disconnect 主题。一旦设备离线,MQTT 系统将触发客户端事件消息。业务系统将会及时收到类似下面事件内容:
{ "clientid": "V622-XXX-XXX",
"username": "sample-user",
"event": "client.disconnected",
"reason": "authentication_expired",
"node": "sz-h-125xm",
"peername": "10.0.0.1:5768",
"disconnected_at": 1724136603064
}

查看客户端事件

方式一:
1. 登录 MQTT 控制台
2. 在左侧导航栏单击资源管理 > 集群管理,选择好地域后,单击目标集群的“ID”,进入集群基本信息页面。
3. 在左侧页签栏选择客户端管理,进入具体客户端详情页,下拉即可查看客户端事件。

方式二:
订阅系统事件 Topic(如$events/client_connected),即可接收到包含详细事件内容的事件消息,详情见下文事件主题

事件主题

MQTT 系统将触发的事件以 QoS=0 消息发布到以下系统主题,业务系统可根据业务需要订阅。
主题名称
备注
$events/client_connected
客户端已连接。
$events/client_disconnected
客户端已断开连接。
$events/session_subscribed
客户端会话新增了订阅。
$events/session_unsubscribed
客户端会话取消了订阅。
$events/certificate_registered
客户端注册了设备证书。
$events/certificate_rejected
客户端设备证书被拒绝, 证书状态为非激活状态,例如 PENDING_ACTIVATION。

连接类事件

客户端连接完成或者断开网络连接后,MQTT Broker 会触发客户端连接或者客户端断开连接事件。
事件消息体是 UTF-8编码的,包含以下字段的 JSON 字符串。

客户端连接事件

客户端成功连接后,MQTT Broker 会触发客户端连接事件,发送消息至主题 $events/client_connected
事件消息体是 UTF-8 编码的 JSON 字符串,并包含以下字段:
字段
语义
示例值
clientid
客户端 ID,经常为产品序列号,车架号等唯一编码。
306520284186458
clean_start
会话是否为 clean-start。
true
connected_at
会话连接时间,自1970/01/01 00:00:00以来的毫秒数。
1717651184811
event
事件类型,固定值 "client.connected"。
client.connected
keepalive
客户端 "keep-alive" 周期, 单位:秒。
60
node
MQTT Broker 节点信息(IP 地址:端口)。
10.0.0.1:1883
proto_ver
协议版本 3/4/5。
4
timestamp
事件产生时间,自1970/01/01 00:00:00以来的毫秒数。
1717651184811
username
用户名。
sample_user

客户端断开事件

客户端断开连接后,MQTT Broker 会触发客户端断开事件,发送消息至主题 $events/client_disconnected。订阅者可以检视 clientid、reason 等字段,以做出适当的响应。
事件消息体是 UTF-8 编码的 JSON 字符串,并包含以下字段:
字段
语义
示例值
clientid
客户端 ID,经常为产品序列号,车架号等唯一编码。
306520284186458
event
事件类型,固定值: "client.disconnected"。
client.disconnected
disconnected_at
断开事件产生时间,自1970/01/01 00:00:00以来的毫秒数。
1717651184811
node
MQTT Broker 节点。
10.0.0.1:1883
reason
客户端断开的原因,枚举值,详细参见下表的客户端断开原因
normal
username
用户名。
sample_user
peername
客户端网络地址。
IP:Port
sockname
MQTT Broker 网络地址。
IP:Port
客户端断开原因
断开连接原因
语义
处理建议
normal
服务端收到 DISCONNECT 报文后正常断开。
正常事件。客户端主动发起的断连,确认是否为业务逻辑预期(如客户端任务完成主动退出)。
takeovered
客户端被相同客户端 ID 设备挤下线。
客户端ID冲突。检查客户端ID生成策略,确保每个在线的设备都有唯一的客户端ID。
(若为偶发单次,可能是网络波动后的自动修复,无需处理。)
kicked
客户端被管控踢下线。
管理员操作。请检查MQTT服务的管控后台或API调用日志,确认是哪位管理员或哪个自动化策略执行了踢出操作及其原因。
keepalive_timeout
MQTT Broker 节点未在1.5倍 keep-alive 周期内收到客户端交互报文。
网络或客户端问题。
1. 检查设备网络连接是否稳定。
2. 检查设备CPU/内存负载是否过高,导致无法及时发送心跳包。
3. 如果是弱网环境,可适当调大 keep-alive 值
not_authenticated
未认证,类似 HTTP 状态码401。
认证信息错误。检查客户端配置的用户名、密码、证书或Token等认证信息是否正确、是否与服务端配置一致。
not_authorized
未授权,类似 HTTP 状态码403
权限不足。客户端认证成功,但无权连接或操作(如发布/订阅特定主题)。请检查ACL策略配置,为该客户端授予必要权限。
tcp_closed
TCP 连接已关闭。
网络层断开。原因如设备网络中断、NAT网关超时、防火墙策略等。
ping_without_connect
客户端在发送 CONNECT 报文之前发送了 PING
客户端SDK/固件Bug。检查并修复客户端 MQTT 协议实现代码,确保严格遵守 CONNECT -> 其他报文的连接建立顺序。
authentication_expired
认证失败,JWT/SAS 等 Token 已过期。
凭证过期。客户端程序应具备刷新Token的能力。
too_many_connection
超过集群/节点最大连接数。
服务端容量问题。
1. 联系我们,提升服务规格或最大连接数限制。
2. 排查是否有客户端异常(如代码Bug)导致创建了大量无效连接。
go_away
MQTT Broker 节点重启,优雅下线。
通常为服务器端升级或维护所致。客户端应实现自动重连机制,以便在服务端恢复后能自动连接回来。
client_id_too_long
客户端 ID 超过最大限制。
客户端ID超长。检查 ID长度(MQTT协议本身上限为23个字符)并修改客户端ID生成逻辑。
client_id_required
持久会话连接时,缺少必要的客户端 ID 字段。
客户端协议错误。当 CleanSession=false 时,客户端ID不能为空。请修复客户端逻辑,要么提供一个ID,要么将 CleanSession 设为true。
client_id_invalid
客户端 ID 包含非法字符,详细参见 Spec 3.1.3.1
客户端ID不合规。客户端ID只能包含 [0-9a-zA-Z] 这些字符。请修改客户端ID生成逻辑,移除或替换非法字符。
bad_will_message
非法遗嘱消息。
遗嘱消息配置错误。检查客户端设置的遗嘱消息(Will Message),确认其主题(Topic)、内容(Payload)格式正确,且客户端有权限向该遗嘱主题发布消息。
server_internal_error
服务端内部错误。
服务端问题。请联系我们并提供相关信息(如时间点、实例ID、客户端ID)以排查服务端问题。

订阅类事件

客户端订阅事件

客户端会话新增订阅后,MQTT Broker 会触发客户端订阅事件,发送消息至主题$events/session_subscribed
事件消息体是 UTF-8 编码的 JSON 字符串,并包含以下字段:
字段
语义
示例值
clientid
客户端 ID,经常为产品序列号,车架号等唯一编码。
306520284186458
event
事件类型,固定值:"client.subscribed"。
client.subscribed
node
MQTT Broker 节点。
10.0.0.1:1883
peerhost
客户端地址。
10.0.0.1:1234
qos
订阅 QoS。
0/1/2
timestamp
订阅事件产生时间,自1970/01/01 00:00:00以来的毫秒数。
1717651184811
topic
订阅的 Topic Filter。
home/#

客户端取消订阅事件

客户端会话取消订阅后,MQTT Broker 会触发客户端订阅事件,发送消息至主题$events/session_unsubscribed
事件消息体是 UTF-8 编码的 JSON 字符串,并包含以下字段:
字段
语义
示例值
clientid
客户端 ID,经常为产品序列号,车架号等唯一编码。
306520284186458
event
事件类型,固定值:"client.unsubscribed"。
client.unsubscribed
node
MQTT Broker 节点。
10.0.0.1:1883
peerhost
客户端地址。
10.0.0.1:1234
qos
订阅 QoS。
0/1/2
timestamp
取消订阅事件产生时间,自1970/01/01 00:00:00以来的毫秒数。
1717651184811
topic
订阅的Topic Filter。
home/#

证书生命周期事件

如果 X.509配置使用"一机一证"模式,以下事件类型可能会产生。

客户端证书注册事件

自动注册模式下, 客户端证书在客户端首次连接时自动注册到云服务。为了标识新的设备加入集群,MQTT 服务会触发客户端注册事件,并发送消息到主题:$events/certificate_registered
事件消息体是 UTF-8 编码的 JSON 字符串,并包含以下字段:
字段
语义
示例值
event
事件类型,固定值 "certificate.registered"
certificate.registered
timestamp
断开事件产生时间,自1970/01/01 00:00:00以来的毫秒数。
1717651184811
node
MQTT Broker 节点。
10.0.0.1:1234
peerName
客户端地址 IP:port。
10.0.0.2:1234
caSn
CA 证书序列号。
7439e17052ff2edbeda4f5db379a69fd8c5f48a5
sn
设备证书序列号。
1bf2f708389ad1397628ab3c6c33b1636b7e49f5
commonName
设备证书常用名。
VIN-1234-5678
status
设备证书状态。
pending_activation/active/inactive/revoked
certificateChainSn
设备证书链序列号。
1bf2f708389ad1397628ab3c6c33b1636b7e49f5,7439e17052ff2edbeda4f5db379a69fd8c5f48a5

客户端证书拒绝事件

如果客户端证书的状态是: 待激活(PENDING_ACTIVATION),客户端尝试连接时,将触发客户端拒绝事件,并发送事件消息到主题:$events/certificate_rejected
消息体是 UTF-8编码的 JSON 字符串, 并包含以下字段:
字段
语义
示例值
event
事件类型,固定值:"certificate.rejected"。
certificate.rejected
timestamp
事件产生时间,自1970/01/01 00:00:00以来的毫秒数。
1717651184811
node
MQTT Broker 节点。
10.0.0.1:1234
peerName
客户端地址 IP:port。
10.0.0.2:1234
caSn
CA 证书序列号。
7439e17052ff2edbeda4f5db379a69fd8c5f48a5
sn
设备证书序列号。
1bf2f708389ad1397628ab3c6c33b1636b7e49f5
commonName
设备证书常用名。
VIN-1234-5678
status
设备证书状态。
inactive/revoked/pending_activation/active
certificateChainSn
设备证书链序列号。
1bf2f708389ad1397628ab3c6c33b1636b7e49f5,7439e17052ff2edbeda4f5db379a69fd8c5f48a5

客户端证书拒绝原因

拒绝原因
语义
处理建议
inactive
证书未注册
注册证书。请在 MQTT 控制台注册该客户端证书。
revoked
证书吊销
更换证书。该证书已被列入吊销列表(CRL),通常是出于安全原因(如密钥泄露)。请确认吊销原因。如需恢复设备连接,应为其颁发并配置新的证书
pending_activation
证书未激活
激活证书。证书已在平台注册但尚未激活。请前往控制台,找到该证书并完成激活操作,以允许其建立连接。









도움말 및 지원

문제 해결에 도움이 되었나요?

피드백