造成大量pubrec报未确认的原因有哪些?

版本emqx4.3.10
系统 Ubuntu18
服务端:Java
客户端:Android
问题:现在服务端经常有大量pubrec消息未确认,造成服务端被断开连接

看下 emqx 的日志截图呢

一般原因是由于,消息太忙了,客户端和服务器对一些重发逻辑实现匹配不好、或者实现就是有问题导致的

确实是 因为服务端这边的消费能力不足,我这里全是QOS2的消息

这个错误日志由于堆积消息,占用内存过多,emqx 把这个链接强制关闭了,而且从日志来看也太频繁了

建议服务端用下共享订阅来收这些消息?

服务端,只有一个啊。共享订阅有用吗?

所有的消息都会发送到服务端,共享订阅的话我服务端只有一个。是不是就和没有共享订阅一样?

多个 TCP 通道也会有改善的

同样的问题,我这边也有出现,控制台PUBREC显示100/100,mqtt的reasonCode = 147,receive maximum exceeded。

我碰到这样的问题,是程序上一些错误处理没有做好,程序执行过程发生了未处理的异常,导致消费积压。

但是,修复了程序上的处理代码问题,重新运行,只要mqtt调用connect,就会立刻触发reasonCode 147,并拒绝连接,这样一来,我就无法继续恢复消费之前的数据,如果清空会话是可以恢复的,但是那部分数据就丢失了。

请问这有什么好的解决办法吗?

这种情况没有太好的解决办法,持久会话是需要服务端和客户端都持有相应的会话数据的,你现在相当于客户端连接以后就是一个全新的会话,没有能力继续消费旧会话中的消息。

1 个赞