全部产品
Search
文档中心

云消息队列 MQTT 版:消息收发常见问题

更新时间:Mar 04, 2026

本文介绍使用云消息队列 MQTT 版进行消息收发时的常见问题。

发送线程卡住的可能原因有哪些?

可能原因:在接收消息的回调方法中直接发送 QoS=1 的消息,可能导致线程阻塞,进而影响心跳发送。

解决方案:将消息发送改为异步方式,或将 QoS 级别改为 0。

MQTT 消息未被消费的可能原因有哪些?

  • 检查该 Topic 的通配符订阅数量。每个一级 Topic 下的通配符订阅不能超过 100 个,超出上限后新增的订阅将无法生效,从而导致消息无法被消费。

  • 若 Topic 从未被订阅过,请确认消费者是否先于生产者启动。

  • 若 Topic 曾被订阅过,请确认 CleanSession 是否设置为 false。注意:QoS 2 不支持 CleanSession=false。

离线消息和实时消息的消费是否有先后顺序?

消费者上线后,离线消息和实时消息之间的消费顺序不作保证。

MQTT消息重试的时间间隔是多久?

消息重试间隔为3~6秒。

MQTT转发到Kafka未接收到消息是什么原因?

可能有以下原因:

1. 转发规则中的SQL未能匹配消息内容,请检查SQL语句是否正确。

2. MQTT转发到Kafka对消息体格式有要求,消息体必须是Key-Value格式的JSON。

3. 通过MQTT快速体验功能或OpenAPI发送的消息不支持规则转发,建议使用官方SDK发送消息。

为什么消息不能由云端生产并由云端消费?

云端SDK不支持消费由云端SDK自身生产的消息,此行为属于产品设计限制。云端SDK的设计定位是接收终端设备上报的消息,而非用于云端之间的消息通信。

配置MQTT流出规则到RocketMQ后为什么收不到消息?

MQTT流出规则到 RocketMQ 存在以下限制:

  • 从MQTT流出到 RocketMQ 的消息ID保持不变。

  • 通过服务端方式(如云端SDK、HTTP)生产的消息不会流出到 RocketMQ,只有终端设备发送的消息才会通过流出规则流转到 RocketMQ。

消息的msgId为什么为空?

msgId为空可能由以下原因导致:

  • 消息体大小超过限制。

  • 内部RPC调用超时。建议客户端实现退避重试机制。

为什么会出现一条消息同一时间重试多次?

问题现象:同一条消息同一时间被重复推送了多次。

消息重试

可能原因:TCP连接写数据被阻塞,TCP连接恢复写数据后多条重试推送数据会同一时间写入,所以看到推送时间都一样。实际重试消息都是间隔产生的,只是暂时堆在了写缓存区内,写成功后才会打印日志。

为什么消息会一直重试?

连接正常的情况下,消息会间隔5秒到10秒重试一次,超过一定次数后还失败则会被丢弃。

如果消息重试时客户端连接已经断开,则消息不会进行sendback,重试次数不会增加,消费位点也不会提交,消息仍被保存在队列中。下次连接时客户端会拉取离线消息。如果客户端频繁闪断,则消息将一直不断被拉取重复推送且不会丢弃。

消息发送时提示GroupID没有权限

若您使用的账号为RAM用户,您需要给RAM用户授予访问云消息队列 MQTT 版资源的权限,云消息队列 MQTT 版支持授予实例、Topic和Group级别的权限。更多信息,请参见RAM主子账号授权

使用RocketMQ数据流入MQTT功能时,为什么子级Topic后会多了一个“/”?

问题现象:使用数据流入规格将云消息队列 RocketMQ 版的数据流入至云消息队列 MQTT 版时,通过mqttSecondTopic属性设置了云消息队列 MQTT 版的子级Topic,消息发送后,子级Topic后会多一个“/”。

可能原因:服务端会对Topic名称进行规范化,默认以“/”结尾。

消息发送返回“Too many publishes in progress”错误

您的消息发送TPS过大,超过上限值。您可以适当调整实例规格,提高消息收发TPS上限。

发送消息后,即使设置了离线消息,也无法收到消息

您需要先启动消费者,再启动生产者生产消息。

若先启动生产者发送消息,如果Topic从未有过订阅,则即使设置了离线消息(QoS=1且cleanSession=false),消费者启动后也不会收到离线消息;如果Topic被消费者订阅过,消费者离线后,若设置了离线消息,这些离线消息会在消费者再次上线后被消费到。

为什么客户端消费时部分Topic的消息接收不到?

云消息队列 MQTT 版对单个客户端订阅的Topic数量和订阅关系的数量均有限制,若超过最大限制,会有部分订阅关系不生效,导致对应Topic的消息接收不到。具体限制,请参见客户端限制

使用微消息队列MQTT收发消息时是否会被限流?

云消息队列 MQTT 版的实例在客户端连接数、消息收发TPS和客户端订阅关系上都有具体规格限制,若超过了规格的最大值,消息收发会被限流。具体限制,可在云消息队列 MQTT 版控制台实例详情页查看当前实例的最大规格。

若当前实例的规格不符合您的业务需求,您可以根据实际情况升级实例配置