客户端超过一定并发数据就断连

EMQX 版本

EMQX 5.0.18

EMQX 安装部署方式

使用 zip 包安装 EMQX

测试场景

使用java语言,使用PahoV5的库作为客户端链接工具

具体问题

单客户端连接,并发超过1000以后,服务端断开了客户端链接,提示disconnect,低于1000的并发不会出现断连的现象,麻烦问下是否emqx服务端对并发数有限制?高于配置值就会断开客户端的连接?

1 个赞

建议先检查下 EMQX 日志,这个版本中有默认的最大连接数,不过是 100 万,1000是不会触发的。

我说的不是连接数,我就启动了一个连接,并发发数据,并发大于1000的时候,emqx就断开了客户端连接。

@Test
public void simpleSendAndRecv() throws Exception {

    AtomicInteger atomFly = new AtomicInteger(0);

    try(var pahoV5 = new PahoV5(this.host, this.port, "PahoV5")){
        s_logger.info("host: {}, port: {}", this.host, this.port);
        pahoV5.connect("cuckooTest");
        var ref = new Object() {
            String msgRecved = null;
        };
        int count = 1000000;
        var latch = new CountDownLatch(count);

        pahoV5.recvAsync(this.topic, (msg) -> {
            atomFly.decrementAndGet();
            //s_logger.info("recv msg: {}", msg);
            ref.msgRecved = msg;
            latch.countDown();
        });
        String msgSend = "hello world";
        for(int i=0; i<count; i++) {
            s_logger.info("send msg: {} {}", i, msgSend);
            while(atomFly.get() > 3000){
                Thread.sleep(1);
                s_logger.info("message fly: {}", atomFly.get());
            }
            pahoV5.sendAsync(this.topic, msgSend);
            atomFly.incrementAndGet();
        }

        latch.await();
        pahoV5.disconnect();
        Assertions.assertEquals(msgSend, ref.msgRecved);
    }
    catch (Exception e){
        s_logger.error("message fly: {}", atomFly.get());
        throw e;
    }
}

这是我的测试代码

没太明白你说的 「并发」是什么意思,没在你的代码里面看见任何和并发相关的东西。
建议将 EMQX 的日志等级设置为 debug,在 debug 级别下,会打印出每次客户端断开的原因。

有解决掉这个问题吗,我用了也是,数据量大了就直接断开连接,java使用ws连接emqx5也是一连就掉线,推送不成功。使用mqttfx订阅,数据量大于一定量直接就掉线了,emqx4.x只是会卡一会,数据还是会出来的