终端设备一直处于断线状态?
检查终端客户端端使用是否进行了重连机制。
连接异常断开?
(1)不同的客户端使用相同的Client ID;
(2) 报文是否超过最大限制;
(3)权限不匹配。
断线重连收不到消息?
(1)对于cleanSession=true的客户端,断线重连后需要重新主题订阅;
(2)对于cleanSession=false的客户端,断线在2h时间范围内重新成功无需进行主题订购,超过也需主题重新订阅。
离线消息缺失?
对于clean session=false的客户端在未超出会话失效期断线重连后可接收Qos>0的离线消息,离线消息限制不超过10条。
Broker连接数为0?
MQTT Broker节点宕机重连,客户端重连至其他节点,正常现象。
产品订购时可选资源池节点不一致?
已上线资源池节点的剩余容量达到一定比例后,为确保老客户权益,将不再面向新客户开放,产品订购时的可选资源节点范围以实际为准。
为什么控制台显示的订阅关系数比实际使用的高很多?
当cleanSession设置为false时,客户端离线后订阅关系也会一直保留,不会被清理。通过设置cleanSession为false,可以确保在客户端离线时保留订阅关系,这对于一些需要持久化订阅关系的应用场景非常有用,例如设备断开连接后重新连接时仍然需要保持之前的订阅状态。
需要注意的是,当cleanSession设置为false时,MQTT Broker需要维护客户端的会话状态,这可能会增加服务器的负担。因此,在设计和配置MQTT应用时,需要权衡清理会话和保留会话的需求,并根据实际情况进行设置。
设备偶尔出现“connection reset by peer”错误。
当两个客户端具有相同的客户端ID(Client ID)时,MQTT Broker会根据规范的要求进行互踢(Kick-off),即断开其中一个客户端的连接。这是因为MQTT协议要求每个客户端ID必须是唯一的,用于标识不同的客户端。
当发生客户端ID重复的情况时,MQTT Broker会选择保持最新连接的客户端,而断开旧连接的客户端。这是为了确保每个客户端ID都对应唯一的客户端连接,并避免潜在的冲突和数据混乱。
当旧连接的客户端被断开后,它可能仍然尝试发送数据到已经断开的TCP连接。这会导致对端Socket发送RST(Reset)报文,通知客户端连接已经被重置或关闭。这是正常的网络行为,用于清除已经断开的连接的残留数据。
资源报表的最大查询范围是多少?
分布式消息服务MQTT支持查询7天以内的指标数据。
为什么设备都断电了,控制台还显示设备在线?
分布式消息服务MQTT会定时检查客户端心跳,当系统检测到客户端超过指定时长(1.5*keepalive时长)没有心跳,则会断开连接。
如何在控制台修改订阅关系?
订阅关系在订阅消息的SDK代码中设置,控制台只能查询。
本地测试先发送消息,再订阅接收不到消息,设置离线消息后还是接收不到。
若先启动生产者发送消息,如果Topic从未有过订阅,则即使设置了离线消息(QoS=1且cleanSession=false),消费者启动后也不会收到离线消息;如果Topic被消费者订阅过,消费者离线后,若设置了离线消息,这些离线消息会在消费者再次上线后被消费到。