Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
连接池Spring rest模板-延迟问题_Spring_Resttemplate - Fatal编程技术网

连接池Spring rest模板-延迟问题

连接池Spring rest模板-延迟问题,spring,resttemplate,Spring,Resttemplate,我正在使用带有连接池的SpringREST模板。我的应用程序必须支持高负载。当我了解到基本RestTemplate不支持池时,我在stackoverflow中找到了以下定义 这是我的实现: @Bean public static RestTemplate restTemplate() { PoolingHttpClientConnectionManager connManager = new PoolingHttpClientConnectionManager(); connM

我正在使用带有连接池的SpringREST模板。我的应用程序必须支持高负载。当我了解到基本RestTemplate不支持池时,我在stackoverflow中找到了以下定义

这是我的实现:

@Bean
public static RestTemplate restTemplate() {

    PoolingHttpClientConnectionManager connManager = new PoolingHttpClientConnectionManager();
    connManager.setMaxTotal(1500);
    connManager.setDefaultMaxPerRoute(1500);

    CloseableHttpClient client = HttpClients.custom()
            .setConnectionManager(connManager)
            .setMaxConnTotal(1500)
            .setMaxConnPerRoute(1500)
            .build();

    RestTemplate restTemplate = new RestTemplate(new HttpComponentsClientHttpRequestFactory(client));

    HttpComponentsClientHttpRequestFactory requestFactory = (HttpComponentsClientHttpRequestFactory) restTemplate.getRequestFactory();
    requestFactory.setConnectTimeout(3000);
    requestFactory.setReadTimeout(3000);
    requestFactory.setConnectionRequestTimeout(3000);

    return restTemplate;
}
现在,只有在高负载的情况下,我每隔一段时间就会遇到高延迟(几乎2秒)。我使用的是Vert.x,因此我可以准确地看到延迟的位置:

    018-06-04 04:08:48,299 WARN  io.vertx.core.impl.BlockedThreadChecker - Thread Thread[vert.x-eventloop-thread-1,5,main] has been blocked for 1872 ms, time limit is 100
io.vertx.core.VertxException: Thread blocked
    at java.net.SocketInputStream.socketRead0(Native Method)
    at java.net.SocketInputStream.socketRead(SocketInputStream.java:116)
    at java.net.SocketInputStream.read(SocketInputStream.java:171)
    at java.net.SocketInputStream.read(SocketInputStream.java:141)
    at org.apache.http.impl.io.SessionInputBufferImpl.streamRead(SessionInputBufferImpl.java:137)
    at org.apache.http.impl.io.SessionInputBufferImpl.fillBuffer(SessionInputBufferImpl.java:153)
    at org.apache.http.impl.io.SessionInputBufferImpl.readLine(SessionInputBufferImpl.java:282)
    at org.apache.http.impl.conn.DefaultHttpResponseParser.parseHead(DefaultHttpResponseParser.java:140)
    at org.apache.http.impl.conn.DefaultHttpResponseParser.parseHead(DefaultHttpResponseParser.java:57)
    at org.apache.http.impl.io.AbstractMessageParser.parse(AbstractMessageParser.java:259)
    at org.apache.http.impl.DefaultBHttpClientConnection.receiveResponseHeader(DefaultBHttpClientConnection.java:163)
    at org.apache.http.impl.conn.CPoolProxy.receiveResponseHeader(CPoolProxy.java:167)
    at org.apache.http.protocol.HttpRequestExecutor.doReceiveResponse(HttpRequestExecutor.java:273)
    at org.apache.http.protocol.HttpRequestExecutor.execute(HttpRequestExecutor.java:125)
    at org.apache.http.impl.execchain.MainClientExec.execute(MainClientExec.java:271)
    at org.apache.http.impl.execchain.ProtocolExec.execute(ProtocolExec.java:184)
    at org.apache.http.impl.execchain.RetryExec.execute(RetryExec.java:88)
    at org.apache.http.impl.execchain.RedirectExec.execute(RedirectExec.java:110)
    at org.apache.http.impl.client.InternalHttpClient.doExecute(InternalHttpClient.java:184)
    at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:82)
    at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:55)
    at org.springframework.http.client.HttpComponentsClientHttpRequest.executeInternal(HttpComponentsClientHttpRequest.java:89)
    at org.springframework.http.client.AbstractBufferingClientHttpRequest.executeInternal(AbstractBufferingClientHttpRequest.java:48)
    at org.springframework.http.client.AbstractClientHttpRequest.execute(AbstractClientHttpRequest.java:53)
    at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:652)
    at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:613)
我不认为增加游泳池的数量应该有什么作用,1500是很多(甚至可能太多)

有人能帮忙吗?
您好,我想请帮忙。我还没有设法修复它,因为您将异步编程(vertx)与阻塞调用api(resttemplate)混合在一起。您不应该阻止事件循环