EMQX 版本
EMQX 5.0.18
EMQX 安装部署方式
使用 zip 包安装 EMQX
测试场景
使用java语言,使用PahoV5的库作为客户端链接工具
具体问题
单客户端连接,并发超过1000
以后,服务端断开了客户端链接,提示disconnect
,低于1000
的并发不会出现断连的现象,麻烦问下是否emqx服务端对并发数有限制?高于配置值就会断开客户端的连接?
EMQX 5.0.18
使用 zip 包安装 EMQX
使用java语言,使用PahoV5的库作为客户端链接工具
单客户端连接,并发超过1000
以后,服务端断开了客户端链接,提示disconnect
,低于1000
的并发不会出现断连的现象,麻烦问下是否emqx服务端对并发数有限制?高于配置值就会断开客户端的连接?
建议先检查下 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只是会卡一会,数据还是会出来的