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 版服务等级协议
联系我们
文档消息队列 MQTT 版实践教程MQTT 客户端开发注意事项

MQTT 客户端开发注意事项

PDF
聚焦模式
字号
最后更新时间: 2026-01-30 15:23:30

设置客户端自动重连

无论是通过公网还是通过内网接入 MQTT 集群, 传输层连接断开都是常态: 移动设备在基站间切换、 网络抖动、服务端版本发布等。因此 MQTT 客户端均需要设置连接断开后自动重连, 并配置合理的退避策略。
需要在 Connect Options 设置连接超时时间、自动重连、最小自动重连间隔、最大自动重连间隔等选项。
Java
C
public class MqttConnectionOptions {
...
// Automatic Reconnect
private boolean automaticReconnect = false;
// Time to wait before first automatic reconnection attempt in seconds.
private int automaticReconnectMinDelay = 1;
// Max time to wait for automatic reconnection attempts in seconds.
private int automaticReconnectMaxDelay = 120;
// Connection timeout in seconds
private int connectionTimeout = 30;
private int maxReconnectDelay = 128000;
...
}
struct MQTTAsync_connectOptions {
...
/**
* The time interval in seconds to allow a connect to complete.
*/
int connectTimeout;
/**
* Reconnect automatically in the case of a connection being lost. 0=false, 1=true
*/
int automaticReconnect;
/**
* The minimum automatic reconnect retry interval in seconds. Doubled on each failed retry.
*/
int minRetryInterval;
/**
* The maximum automatic reconnect retry interval in seconds. The doubling stops here on failed retries.
*/
int maxRetryInterval;
};

Paho SDK CleanSession=True 或 CleanStart = True 订阅

Paho SDK Subscriber Client, 如果 Session 配置 CleanSession = True 或者 CleanStart = True , 当发生自动重连后,SDK 不会自动重新订阅,需要在回调中重新订阅。参考 Issue 221

以 Java 回调为例:
try (MqttClient client = new MqttClient(serverUri, clientId, new MemoryPersistence())) {
MqttConnectOptions options = new MqttConnectOptions();
options.setCleanSession(true);
...
client.setCallback(new MqttCallbackExtended() {
@Override
public void connectComplete(boolean reconnect, String serverURI) {
...
try {
// 必须重新订阅
client.subscribe(topicFilter, qos);
} catch (MqttException e) {
e.printStackTrace();
}
}
...
});
client.connect(options);
}

QoS 降级

MQTT 服务端向订阅者投递消息的时候, 并不总是按照订阅表达式指定的 QoS 投递, 而是取 { 发布消息 QoS, 服务端支持的最大 QoS,订阅 QoS } 三者最小值。
假设发布消息 Mi 使用的 QoS 为1、服务端最大支持的 QoS 为 2、 订阅使用的 QoS 为 2,投递该消息使用的 QoS 为 1。



帮助和支持

本页内容是否解决了您的问题?

填写满意度调查问卷,共创更好文档体验。

文档反馈