当前位置: 首页 > 知识库问答 >
问题:

如何将连接更改为挂起状态?ReactorNetty

丁和歌
2023-03-14

嗨,我是ReactorNetty的新手。

我正在尝试使用连接池通过TCP协议传输。因此,我在应用程序启动时构建了ConnectionProvider,并将其作为参数提供给TcpClient。

  @PostConstructpublic void init() {     
    provider = ConnectionProvider.builder("fixed")            
                .maxConnections(20)            
                .pendingAcquireMaxCount(200)            
                .pendingAcquireTimeout(Duration.ofSeconds(20))            
                .maxIdleTime(Duration.ofSeconds(10))            
                .maxLifeTime(Duration.ofSeconds(20))       
                .build();
  } 

public void send(String ip, int port, String logText) {    
    TcpClient tcpClient = TcpClient.create(provider)            
                          .host(ip)            
                          .port(port);    
    tcpClient.connect().subscribe(connection -> {        
              System.out.println("connection : " + connection);       
              connection.outbound().sendString(Mono.just(logText)).then().subscribe();           
    });
} 

发送20次后,应用程序抛出

PoolAcquireTimeoutException:Pool#acquire(Duration has been pending for more than the configured timeout of 20000ms

如果我删除。pendingAcquireMaxCount(200)和。pendingAcquireTimeout(持续时间秒(20))在构建连接提供程序时,它抛出

PoolAcquirePendingLimitException: pending acquire queue has reached its maximum size of 40

我想这是因为连接没有正确返回到池。

我如何解决这个问题??

共有1个答案

岳亮
2023-03-14

当连接池被完全使用时,您可以将挂起的连接请求设置为没有限制,使用作为配置的生成器属性的值:

provider = ConnectionProvider.builder("fixed")
     .maxConnections(20)
     .pendingAcquireMaxCount(-1) // no limits on pending connection requests
     .maxIdleTime(Duration.ofSeconds(10)) // you should better increase the max-idle value as well        
     .maxLifeTime(Duration.ofSeconds(20))       
     .build();
 类似资料:
  • 我正在寻找关于如何正确使用Kubernetes本地存储PVC的帮助。 我们在Ubuntu上提供了一个kubespray集群,并启用了本地存储提供器。 我们做错了什么?

  • 我有这个app,我有背景色灰色的头,我怎么把状态栏设置成同样的颜色?我需要将(蓝紫色)颜色改为与标题背景相同的灰色。

  • 我正在尝试使用React Redux。我遇到了这样一种情况:一个连接的组件(Coordinates.jsx)嵌套在另一个连接的组件(Canvas.jsx)中。 源代码https://github.com/RinatRezyapov/Vault-13.git(纱线安装,然后纱线开始) 在父组件画布中。jsx I在componentDidMount()中调度一个操作,该操作不可变地更改状态。 帆布js

  • 问题内容: 我需要状态从改变到的,当一些事件发生。 这是我的按钮的当前状态,当前已禁用: Anyonne可以帮助我该怎么做吗? 问题答案: 您只需将您按钮的设置为: 要么 此代码将在事件的回调中使用,该事件将导致Button启用。 另外,正确的代码应为: 该方法的回报,且将其分配给。您实际上想要将返回值分配给,然后在下面的行中使用。

  • 我的hql查询似乎有什么问题? 错误: 组织。冬眠hql。内部的ast。QuerySyntaxException:意外标记:第1行第263列附近的标记 我假设它是在谈论

  • 我正在尝试使用Flutter中的进度状态按钮。在pub.dev文档中,小部件的设置如下