mqtt重复下发同一个消息id问题
一.问题描述与分析
最近在物联网项目开发中,mqtt服务器给我们设备推送消息时,概率性出现同一个消息id重复下发问题。通过使用wireshark抓包判断,得出结论是我们设备在收到服务器推送的消息后,没有立即给服务器回复ack造成的,下图为设备抓包log。
从log中分析,服务器向设备发送一个publish message消息后,我们设备回复publish ack不及时,如果超过20s未收到设备回复的ack,将会消息重发。我们定义的消息qos级别为1。
代码段:
int MQTTSubscribe(Client* c, const char* topicFilter, enum QoS qos, messageHandler messageHandler)
参数 | 含义 |
---|---|
c | mqtt客户端 |
topicfilter | 订阅主题 |
qos | 消息等级 |
messagehandler | 订阅主题回调函数 |
wireshark log