码迷,mamicode.com
首页 > 编程语言 > 详细

springcloud 实现微服务间调用

时间:2019-02-19 13:45:17      阅读:283      评论:0      收藏:0      [点我收藏+]

标签:tom   register   veh   adt   timeout   private   dir   component   使用   

package com.idoipo.ibt.config;

import org.apache.http.HttpException;
import org.apache.http.HttpRequest;
import org.apache.http.HttpRequestInterceptor;
import org.apache.http.client.HttpClient;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.config.RegistryBuilder;
import org.apache.http.conn.socket.ConnectionSocketFactory;
import org.apache.http.conn.socket.PlainConnectionSocketFactory;
import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
import org.apache.http.impl.client.DefaultHttpRequestRetryHandler;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
import org.apache.http.protocol.HTTP;
import org.apache.http.protocol.HttpContext;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.HttpStatus;
import org.springframework.http.client.ClientHttpRequestFactory;
import org.springframework.http.client.ClientHttpResponse;
import org.springframework.http.client.HttpComponentsClientHttpRequestFactory;
import org.springframework.web.client.DefaultResponseErrorHandler;
import org.springframework.web.client.RestTemplate;

import java.io.IOException;

/**
 * Created by Jemmy on 2016/12/1.
 */
@Configuration
@SuppressWarnings("unused")
public class WebConfiguration {

    private Logger logger= LoggerFactory.getLogger(WebConfiguration.class);

    @Value("${com.idoipo.httpcomponent.maxconnperroute}")
    private int maxConnPerRoute;
    @Value("${com.idoipo.httpcomponent.maxconntotal}")
    private int maxConnTotal;
    @Value("${http.agent}")
    private String userAgent;


    //参考微信OA,使用HttpCommponent
    @Bean
    public RestTemplate restTemplate(ClientHttpRequestFactory factory){
        RestTemplate restTemplate=new RestTemplate(factory);
        restTemplate.setErrorHandler(new RestClientResponseErrorHandler());
        return restTemplate;
    }


    @Bean
    public HttpClient httpClient(){

        HttpClientBuilder builder= HttpClients.custom();

        PoolingHttpClientConnectionManager connectionManager=new PoolingHttpClientConnectionManager(RegistryBuilder.<ConnectionSocketFactory>create()
                .register("http", PlainConnectionSocketFactory.getSocketFactory())
                .register("https", SSLConnectionSocketFactory.getSocketFactory())
                .build());
        builder.setConnectionManager(connectionManager);
        builder.useSystemProperties();

        builder.setRetryHandler(new DefaultHttpRequestRetryHandler(5,false));

        //请求配置
        RequestConfig.Builder requestConfigBuilder=RequestConfig.copy(RequestConfig.DEFAULT);
        requestConfigBuilder.setConnectTimeout(1000*120);
        requestConfigBuilder.setConnectionRequestTimeout(1000*120);
        requestConfigBuilder.setSocketTimeout(1000*150);
        builder.setUserAgent(userAgent);

        builder.setDefaultRequestConfig(requestConfigBuilder.build());

        builder.setMaxConnPerRoute(maxConnPerRoute);
        builder.setMaxConnTotal(maxConnTotal);
        builder.addInterceptorLast(new HttpRequestInterceptor() {
            public void process(final HttpRequest request, final HttpContext context) throws HttpException, IOException {
                request.removeHeaders(HTTP.CONN_DIRECTIVE);
            }
        });

        //禁用cookie及认证缓存
        builder.disableAuthCaching();
        builder.disableCookieManagement();

        //打印client配置
        logger.debug("Http Client Configuration:{}",requestConfigBuilder.build().toString());
        return builder.build();
    }


    @Bean
    public ClientHttpRequestFactory simpleClientHttpRequestFactory(){
        HttpComponentsClientHttpRequestFactory factory = new HttpComponentsClientHttpRequestFactory(httpClient());
        factory.setReadTimeout(5000);//ms
        factory.setConnectTimeout(15000);//ms
        return factory;
    }

    class RestClientResponseErrorHandler extends DefaultResponseErrorHandler{

        @Override
        public void handleError(ClientHttpResponse response) throws IOException {
            throw new IOException("第三方服务调用时,发生错误");
        }

        @Override
        protected boolean hasError(HttpStatus statusCode) {
            return statusCode.series() == HttpStatus.Series.SERVER_ERROR;
        }
    }
}

 

springcloud 实现微服务间调用

标签:tom   register   veh   adt   timeout   private   dir   component   使用   

原文地址:https://www.cnblogs.com/keepMoveForevery/p/10400162.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!