发现EMQX 有些客户端的订阅数量为0。
如果我在EMQX 手动剔除。程序MQTT 重连是会重新订阅的。
我使用MQTT 5.0的客户端。重连是有判断connectAck.SessionPresent。只有当SessionPresent==false 才会发送订阅主题。
EMQX 的版本是4.4.11.
请问哪里有可能出现问题呢?
发现EMQX 有些客户端的订阅数量为0。
订阅关系会存放在客户端的 session 里面。
而手动踢出会把 client 的 session 也清理掉。
所以按照你的客户端的逻辑:
当SessionPresent==false 才会发送订阅主题。
被踢出的客户端再重连就不会重新进行订阅。但实际上对于 EMQX 来说,这是一个全新的连接。与被踢出之前的 client session 没有关系。
会话保留 600秒
MQTT 客户端连上,订阅2个主题 ,断网
上EMQX后台将这2个主题取消订阅
再联网重联。 服务器发来的ConnnectAck.SessionPresent 为true.
问题1: 此时MQTT 客户端如何判断是否需要发送订阅主题?
问题2: EMQX 能否为后台取消订阅的功能 设置关闭?
问题3: 是否有可能发生ConnnectAck.SessionPresent返回了true.而EMQX后台实际没有订阅主题的情况
实际上。我的程序一启动就订阅了2个主题。程序运行了很长一段时间。期间可能发生了断网重连。再来看。订阅的主题数为0.
目前本地将网络禁用。来测试。也不能重现该问题!