iOS设备,飞行窗口满了之后,接收不到消息

环境信息

  • EMQX 版本:4.2.6
  • 操作系统及版本:iOS
  • 其他

问题描述

iOS客户端聊天场景,QoS2,cleanSession NO,使用MQTTClient开源库连接EMQ服务,最近测试发现,当EMQ的飞行窗口满了之后,客户端接收不到消息,官方大佬以及各位开发友人们,有遇到过类似问题的没,有什么解决方案

配置文件及日志

飞行窗口满了,后续消息会被会话缓存,直到飞行窗口出现空余。飞行窗口满了,意味着客户端没有进行消费确认或者客户端处理达到了极限,这个时候肯定不会继续向客户端进行数据推送了

是的,请问,客户端如何消费确认?这个有什么方式

这个是根据qos 的值确认的。可以看一下协议定义。同时看这里也比较清晰每个值的流程:协议介绍 | EMQX 企业版

qos设置2,cleanSession为0,我们理解MQ连接成功会自动消费飞行窗口消息,目前的问题是,连接成功后未消费,请帮忙提供一下相关文献或者配置指引,谢谢

这个需要你去确认你使用的客户端 SDK 的行为了,在 dashboard 上可以看到发出了多少 qosX 的信息,以及多少进行了确认,可以当作参考数据

理解一下飞行窗口的定义:飞行窗口和消息队列 | EMQX 企业版 飞行窗口中就是的等待确认的消息。未消费的需要你查一下该客户端的session 中队列里有积压没有。看dashboard上客户端的session 里队列和飞行窗口

官方大佬,再请教一下,为了解决飞行窗口阻塞的问题,我们更换了咱们推荐的CocoaMQTT库,但是遇到了消息丢失问题,这个可有反馈或者了解,以及排查思路都可以

怎么查出来丢失的,具体操作?同时看到有报消息队列满的日志吗