本文汇总了微消息队列MQTT版计费和使用的常见问题。

计费相关

我已经购买了微消息队列MQTT版实例,并完成支付,为什么发消息后,还会继续扣钱呢?

微消息队列MQTT版预付费只限于微消息队列MQTT版所支持的协议,即MQTT的消息传输以及消息存储,不包含消息队列RocketMQ版的Topic资源占用费以及消息队列RocketMQ版所支持的其他协议(TCP)所产生的API调用费。

使用相关

问题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,则会被丢弃,导致收不到这部分消息。