emqx 5.0.19 客户端短时间接收大量消息后 链接被关闭 导致消息丢失

3个节点的集群模式,短时间内,生产者发布5000+消息后,客户端链接被关闭

emqx 日志打印警告: connection congestion 。。。

使用旧版4.4.4正常,请问这个是需要调整哪些配置吗?

是因为订阅者消费太慢,导致 TCP 阻塞了。可能是客户端消费能力不够或者网络带宽受限。

你也可以尝试放大一些发送缓冲区的配置,当然如果是上述原因导致的,这也只是延迟问题的出现而已:

listener.tcp.external.sndbuf = 1MB
listener.tcp.external.buffer = 1MB

好的,我下午试下,感谢。

试了一下,还是不行。好像没啥效果。

请问,还有其他方法吗?

请更改 force_shutdown.max_message_queue_len 配置项,该配置默认为 1000

参考配置文档中 性能优化 一节

补充:如果经常性出现需要给某个客户端投递大量消息的情况,这样只能延缓问题出现而不能解决。

试了下,调大后可以正常工作了,感谢您的解答。

顺便我还想咨询下, 这个配置在4.4.4版本是否不支持,我没有在文档里找到这个配置。

4.x 有关于消息队列的配置项: zone.external.max_mqueue_len,但它不会关闭连接,仅表示队列长度。
zone.internal.force_shutdown_policy 配置才作为强制关闭连接的参数配置

明白了,感谢您的解答。

1 个赞

您好,我目前用的是emqx 5.4.0,发现 force_shutdown 下面 已经没有 max_message_queue_len 这个配置项了,是不是换成了 max_mailbox_size ?

是的,被重命名了
https://github.com/emqx/emqx/pull/10623