Um RestTemplate verwenden zu können, müssen Sie vor der Verwendung die Konfigurationsklasse hinzufügen.

1. Übersicht

RestTemplate ist ein von Spring bereitgestellter Client für den Zugriff auf Rest-Dienste. Die unterste Ebene implementiert die Erstellung von http-Anfragen über das java.net-Paket. Durch die Verwendung von clientHttprequestfactory zur Angabe verschiedener http-Anfragemethoden werden zwei Hauptimplementierungen bereitgestellt:

SimpleClientHttpRequestFactory (Standard):

Die unterste Ebene verwendet die von J2SE bereitgestellte Methode, dh die vom Paket java.net bereitgestellte Methode, um die zugrunde liegende http-Anfrage zu erstellen.

Die Hauptmethode ist createRequest, die jedes Mal eine neue Verbindung erstellt, was zu einer enormen Ressourcenverschwendung führt und die eingehende Verbindung nicht rechtzeitig freigeben kann, was dazu führt, dass nachfolgende Anforderungen blockiert werden, weil keine neue Verbindung hergestellt werden kann.

HTTPComponentsClientHttpRequestFactory:

Die unterste Ebene verwendet httpclient, um auf Remote-HTTP-Dienste zuzugreifen.

Bei jeder Clientanforderung muss eine neue Verbindung hergestellt werden, d kapselt httpclient. httpclient unterstützt den Pooling-Mechanismus.
Fügen Sie die folgende Konfigurationsdatei hinzu

erforderliche Abhängigkeiten

  <dependency>
      <groupId>org.apache.httpcomponents</groupId>
      <artifactId>httpclient</artifactId>
      <version>4.5.7</version>
  </dependency>

  <dependency>
      <groupId>org.apache.httpcomponents</groupId>
      <artifactId>httpcore</artifactId>
      <version>4.3.3</version>
  </dependency>
@Configuration
public class RestTemplateConfig {
    
    
 
    @Bean
    public RestTemplate restTemplate(ClientHttpRequestFactory requestFactory){
    
    
        return new RestTemplate(requestFactory);
    }
 
 
 
    @Bean
    public ClientHttpRequestFactory httpRequestFactory(){
    
    
        return new HttpComponentsClientHttpRequestFactory(httpClient());
    }
 
    @Bean
    public HttpClient httpClient(){
    
    
 
 
        Registry<ConnectionSocketFactory> registry = RegistryBuilder.<ConnectionSocketFactory>create()
                .register("http", PlainConnectionSocketFactory.getSocketFactory())
                .register("https", SSLConnectionSocketFactory.getSocketFactory())
                .build();
 
        PoolingHttpClientConnectionManager connectionManager = new PoolingHttpClientConnectionManager(registry);
 
 
        //设置连接池最大是500个连接
        connectionManager.setMaxTotal(500);
        //MaxPerRoute是对maxtotal的细分,每个主机的并发最大是300,route是指域名
        connectionManager.setDefaultMaxPerRoute(300);
        /**
         * 只请求 class.net,最大并发300
         *
         * 请求 class.net,最大并发300
         * 请求 open1024.com,最大并发200
         * 两个一共不能超过500
         */
 
        RequestConfig requestConfig = RequestConfig.custom()
                //返回数据的超时时间
                .setSocketTimeout(20000)
                //连接上服务器的超时时间
                .setConnectTimeout(10000)
                //从连接池中获取连接的超时时间
                .setConnectionRequestTimeout(1000)
                .build();
 
 
        CloseableHttpClient closeableHttpClient = HttpClientBuilder.create().setDefaultRequestConfig(requestConfig)
                .setConnectionManager(connectionManager)
                .build();
 
        return closeableHttpClient;
    }
}

Supongo que te gusta

Origin blog.csdn.net/qq_41848006/article/details/130104378
Recomendado
Clasificación