You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何限制Quarkus Vert.x TCP服务器可接受的TCP连接数?

如何限制Quarkus中Vert.x TCP服务器的最大连接数?

我有一个基于Quarkus的应用,其中启动了一个Vert.x TCP服务器。这个服务器监听指定端口接收入站连接,读取套接字数据后将消息发送至Kafka。

以下是我启动服务器的代码片段:

NetServerOptions options = new NetServerOptions().setTcpKeepAlive(true).setReusePort(true).setLogActivity(true);
NetServer server = this.vertx.getDelegate().createNetServer(options);
server.listen(8085, "0.0.0.0", (event) -> {
        boolean result = event.succeeded();
        if(result == Boolean.TRUE) {
            logger.info("tcp server start status:" + result);
        }
        else{
            logger.error("failed to start server",event.cause());
        }
    });

我希望限制这个服务器能支持的TCP连接总数,应该怎么配置?


你可以通过NetServerOptions提供的两个方法来配置连接限制:

  • setMaxConnections(int max):直接设定服务器允许的最大活跃连接数。当连接数达到这个阈值后,服务器会拒绝新的连接请求。
  • setAcceptBacklog(int backlog):设置TCP连接的等待队列大小。这个队列用于存放已完成TCP三次握手但尚未被应用层处理的连接,队列满时,新的连接请求会被操作系统内核拒绝。

修改后的代码示例如下:

NetServerOptions options = new NetServerOptions()
        .setTcpKeepAlive(true)
        .setReusePort(true)
        .setLogActivity(true)
        .setMaxConnections(1000) // 设置最大活跃连接数为1000
        .setAcceptBacklog(500); // 设置等待队列大小为500

NetServer server = this.vertx.getDelegate().createNetServer(options);
server.listen(8085, "0.0.0.0", (event) -> {
        boolean result = event.succeeded();
        if(result == Boolean.TRUE) {
            logger.info("tcp server start status:" + result);
        }
        else{
            logger.error("failed to start server",event.cause());
        }
    });

需要注意:

  • setMaxConnections管控的是已被Vert.x接受并处于活跃状态的连接数,超过该数值时新连接会被直接拒绝。
  • setAcceptBacklog对应的是TCP层的backlog参数,实际生效的队列大小可能受操作系统内核参数限制(比如Linux系统的somaxconn),若设置值超过内核允许的最大值,会被内核自动截断。

内容的提问来源于stack exchange,提问作者Jaiprasad

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 13:31:08