微信小程序mqtt 多条离线qos=1 消息只收到一条是什么原因?

微信小程序mqtt 多条离线qos=1 消息只收到一条是什么原因?

mqttx测试工具发送多条qos=1 消息,微信小程序mqtt连接接收用户上线后,只收到最后一条是因为什么原因?mqttx测试工具订阅主题是可以收到所有离线qos=1消息的,但是小程序mqtt订阅则只收到最后一条,是连接的时候需要设置什么吗?

连接参数已经设置了 clean: false,订阅时也设置了qos=1 了,this.data.client.subscribe(topic,{qos:1});

不需要,你可以:
在 emqx 的 dashboard 上对这个 clienid 进行日志追踪。然后对比一下两种情况各自的发包有什么区别。

订阅的是同一个主题,小程序只能收到最后一条,mqttx可以收到所有离线消息

那可以先排查一下是 EMQX 没有发出去消息给小程序,还是小程序收到了,没有处理。

这个可以看出来的。

发出去了,日志是这样的,看不懂什么原因
mqtt_packet_received, packet: PUBACK(Q0, R0, D0, PacketId=46, ReasonCode=0), username: 9

2025-05-07T16:52:08.952680+08:00 [WS-MQTT] communicate_9@112.97.65.103:50972 msg: mqtt_packet_received, packet: PUBACK(Q0, R0, D0, PacketId=47, ReasonCode=0), username: 9

2025-05-07T16:52:08.952722+08:00 [WS-MQTT] communicate_9@112.97.65.103:50972 msg: mqtt_packet_received, packet: PUBACK(Q0, R0, D0, PacketId=48, ReasonCode=0), username: 9

2025-05-07T16:52:11.757462+08:00 [WS-MQTT] communicate_9@112.97.65.103:50972 msg: mqtt_packet_received, packet: SUBSCRIBE(Q1, R0, D0, PacketId=46304 TopicFilters=[www.takenice.com_communicate_9(#{nl => 0,qos => 1,rap => 0,rh => 0})]), username: 9

2025-05-07T16:52:11.757672+08:00 [AUTHZ] communicate_9@112.97.65.103:50972 msg: authorization_module_ignore, action: SUBSCRIBE(Q1), module: emqx_authz_client_info, topic: www.takenice.com_communicate_9, username: 9

2025-05-07T16:52:11.757834+08:00 [QUERY] communicate_9@112.97.65.103:50972 msg: mysql_connector_received, client_ids: , connector: emqx_authz_mysql:8464, rule_ids: , rule_trigger_ts: , sql: emqx_authz_mysql, state: [pool_name: emqx_authz_mysql:8464, query_templates: [{emqx_authz_mysql,prepstmt}: {[<<“SELECT action, permission, topic FROM mqtt_acl where username = ?”>>],}], prepares: ok], username: 9

2025-05-07T16:52:11.762193+08:00 [AUTHZ] communicate_9@112.97.65.103:50972 msg: authorization_nomatch, action: SUBSCRIBE(Q1), authorize_type: mysql, module: emqx_authz_mysql, topic: www.takenice.com_communicate_9, username: 9

2025-05-07T16:52:11.762313+08:00 [AUTHZ] communicate_9@112.97.65.103:50972 msg: authorization_matched_allow, action: SUBSCRIBE(Q1), authorize_type: file, module: emqx_authz_file, topic: www.takenice.com_communicate_9, username: 9

消息队列
3/1000 这里显示发送到服务器了

那应该不是 EMQX 的问题,建议找专业的人帮看看你的小程序代码,我不会 JS。

不是js的问题吧

测试了下是固定丢失3条离线消息,怎么回事啊?

mqtt.js 离线消息接收固定丢失3条,是什么情况啊?
看了下服务器里面的 消息队列的记录数是正常的,已经成功发送到服务器,但是接收时前3条接收不到

客户端是持久会话,且永不过期

建议在小程序端debug一下,虽然从你的描述里面可以推测出emqx已经发出去了,但是还是建议你抓包看看

就没有收到丢失的3条,debug没用