问题 1:收到使用非法 Group ID 的短信报警

原因:

微消息队列 MQTT 的接入流程中,客户端使用的 Group ID 是需要到控制台先申请再使用的。如果没有申请就使用,可能会导致连接断开,无法正常收发消息。

建议:

根据报警短信提示的非法 Group ID,登录微消息队列 MQTT 控制台,进入 Group 管理,确认该 Group ID 是否已经创建。如果没有创建,您需要手动申请创建。Group ID 的命名必须符合规范才可以申请成功。

问题 2:收到离线消息存储数量超过系统限制的短信报警

原因:

微消息队列 MQTT 对于每个实例中存储的离线消息数量是有限制的。关于具体的限制值,请参见使用限制中的相关说明。如果客户端订阅关系设置不当,产生了大量离线消息,超过了规格限制,则系统会从最早的消息清理,直到满足规格限制。

建议:

  • 根据报警短信提示的实例 ID,确认接入对应实例的客户端使用的是否为持久化 Session,以及是否使用了 QoS1 级别的订阅关系。
  • 确认上述客户端是否存在大量不在线的情况。
  • 确认是否还有消息发送给这些离线的客户端。
  • 确认如果属于错误使用,可以修改为 cleanSession 模式,并提工单请求清理错误的数据。
说明

持久化 Session 的订阅关系仅适用于客户端每次上线时 clientId 固定且上线后还需要获取离线期间没有收到的消息的场景。如果客户端 clientId 每次上线时都不固定,或者业务上不需要关注离线状态,请使用 cleanSession 模式,具体说明请见名词解释中的相关描述。

问题 3:连接被异常断开

原因:

  • 微消息队列 MQTT 的服务端在客户端发送 Publish 和 Subscribe 报文的时候进行权限验证,如果权限验证失败则会断开连接。
  • 不同的客户端使用相同的 Client ID 连接微消息队列 MQTT 服务,会被强制断开。

建议:

客户端确保自己的 Client ID 全局唯一,不要重复连接,同时做好断线重连的逻辑。

问题 4:之前订阅过的 Topic 消息还在继续推送

原因:

MQTT 协议中订阅关系是持久化的,因此如果不需要订阅某些 Topic,需要调用 unsubscribe 方法取消订阅关系。

问题 5:为什么有的 Topic 的消息能收到,有的收不到

原因:

每个微消息队列 MQTT 客户端允许持有的订阅关系数量有限制,具体值请参见使用限制。如果一个客户端试图订阅超过该限制数量的 Topic ,则会被丢弃,导致收不到这部分消息。