SpringCloud 应用间通信基于HTTP的Restful调用方式有两种,RestTemplate与Feign

1.RestTemplate是远程调用Http的工具,支持本地负载均衡,是对Ribbon的封装。

  pom文件加入spring-boot-starter-web依赖

  调用的url是服务名,在eureka注册中心注册的服务名。使用服务名可以支持本地的负载均衡,如果使用ip地址,则不支持负载均衡。

  一般使用@Bean将RestTemplate 注册到spring 容器中 @LoadBalanced 开启负载均衡

@Configuration
public class RestTemplateConfig { 
    
    @Value("${remote.maxTotalConnect}")
    private int maxTotalConnect; //连接池的最大连接数默认为0
    @Value("${remote.maxConnectPerRoute}")
    private int maxConnectPerRoute; //单个主机的最大连接数默认200
    @Value("${remote.connectTimeout}")
    private int connectTimeout; //连接超时默认2s
    @Value("${remote.readTimeout}")
    private int readTimeout; //读取超时默认30s
    @Bean// 将RestTemplate  注册到spring 容器中
    @LoadBalanced// 开启负载均衡
    RestTemplate restTemplate(){
        RestTemplate restTemplate = new RestTemplate(createFactory());
         List<HttpMessageConverter<?>> converterList = restTemplate.getMessageConverters();
         //重新设置StringHttpMessageConverter字符集为UTF-8,解决中文乱码问题
         HttpMessageConverter<?> converterTarget = null;
         for (HttpMessageConverter<?> item : converterList) {
             if (StringHttpMessageConverter.class == item.getClass()) {
                 converterTarget = item;
                 break;
             }
         }
         if (null != converterTarget) {
             converterList.remove(converterTarget);
         }
         converterList.add(new StringHttpMessageConverter(StandardCharsets.UTF_8));
        return restTemplate;
    }
        
    //创建HTTP客户端工厂
    private ClientHttpRequestFactory createFactory() {
        if(this.maxTotalConnect <= 0){
            SimpleClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory();
            factory.setConnectTimeout(this.connectTimeout);
            factory.setReadTimeout(this.readTimeout);
            return factory;
        }
        HttpClient httpClient = HttpClientBuilder.create().setMaxConnTotal(this.maxTotalConnect).setMaxConnPerRoute(this.maxConnectPerRoute).build();
        HttpComponentsClientHttpRequestFactory factory = new HttpComponentsClientHttpRequestFactory(httpClient);
        factory.setConnectTimeout(this.connectTimeout);
        factory.setReadTimeout(this.readTimeout);
        return factory;
    }
}
View Code

相关文章:

  • 2021-07-20
  • 2021-07-11
  • 2021-11-28
  • 2021-11-19
  • 2022-01-19
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2021-09-22
  • 2022-12-23
  • 2021-08-10
  • 2022-01-02
  • 2022-12-23
  • 2021-05-11
  • 2021-06-13
相关资源
相似解决方案