确定本地只起了一个消费者 只有偶尔能收到消息 大部分时候是收不到消息的
大概率就是你的客户端代码问题,你用MQTTx订阅相同的主题 看能不能收到就知道了
只是在回调方法里面打印了收到的消息
而且偶尔还能收到消息, 注意到一个现象就是虽然已连接的客户端只有一个,但是在订阅管理菜单中订阅同一个有很多个 不知道会不会有影响
同样的代码没有任何改动,刚刚试了下 推送的消息基本都能收到了
大致可以确定现象就是每次重启之后监听的clientId变化了,然后订阅管理菜单中显示会有多个客户端ID监听同一个共享topic, 如果有10个客户端监听过 但实际上只有一个客户端是已经连接上的 那么我推送10条消息也只会有1条消息能被这个已链接的客户端接收到
如果CleanSession被设置为0,服务器必须根据当前的会话状态恢复与客户端的通信(客户端的唯一标识作为会话的标识)。如果没有与客户端唯一标识相关的绘画,服务端必须创建一个新的会话。客户端和服务端在断开连接后必须存储会话[MQTT-3.1.2-4]。当CleanSession为0的会话断开后,服务器还必须将所有和客户端订阅相关的QoS1和QoS2的消息作为会话状态的一部分存储起来[MQTT-3.1.2-5]。也可以选择把QoS0的消息也存储起来。
看了下文档也就是说如果CleanSession我设置的false,那么即使我的客户端不在线 消息推送给该客户端的消息也会存起来,等待该客户端上线再次消息消息即可
我原来的理解是只有客户端在线才会共享消费这个topic的消息 离线的客户端不会去消费的