如何限制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
相关产品推荐
相关产品推荐

