requestFactory = requestFactory(); List<TokenGranter> tokenGranters = new ArrayList<TokenGranter> requestFactory) { this(authenticationManager, tokenServices, clientDetailsService, requestFactory requestFactory, String grantType) { super(tokenServices, clientDetailsService, requestFactory requestFactory = requestFactory(); List<TokenGranter> tokenGranters = new ArrayList(); */ private OAuth2RequestFactory requestFactory() { return new DefaultOAuth2RequestFactory
( LoadBalancerClient loadBalancerClient, LoadBalancerRequestFactory requestFactory ) { return new LoadBalancerInterceptor(loadBalancerClient, requestFactory); } loadBalancerClient, LoadBalancerRetryProperties properties, LoadBalancerRequestFactory requestFactory { this.loadBalancer = loadBalancer; this.lbProperties = lbProperties; this.requestFactory = requestFactory; this.lbRetryFactory = lbRetryFactory; } @Override public ClientHttpResponse
= null, "No standard HTTP method"); ClientHttpRequest delegate = requestFactory.createRequest return delegate.execute(); } }}执行时序图图片选择方案-RequestFactory如果需要对响应流进行包装实现可重用. = null; if (this.requestFactory ! = null) { requestFactory = this.requestFactory.get(); } else if (this.detectRequestFactory ) { requestFactory = new ClientHttpRequestFactorySupplier().get(); } if (requestFactory
LoadBalancerInterceptor loadBalancerInterceptor(LoadBalancerClient loadBalancerClient,LoadBalancerRequestFactory requestFactory ) { return new LoadBalancerInterceptor(loadBalancerClient, requestFactory); } @Bean @ ClientHttpRequestInterceptor {private LoadBalancerClient loadBalancer;private LoadBalancerRequestFactory requestFactory ;public LoadBalancerInterceptor(LoadBalancerClient loadBalancer, LoadBalancerRequestFactory requestFactory ) {this.loadBalancer = loadBalancer;this.requestFactory = requestFactory;}public LoadBalancerInterceptor
= new HttpComponentsClientHttpRequestFactory(); requestFactory.setHttpClient(httpClient); RestTemplate ) { return new LoadBalancerInterceptor(loadBalancerClient, requestFactory); } @Bean ) { return new LoadBalancerInterceptor(loadBalancerClient, requestFactory); } 这里的拦截器注入了负载均衡客户端,那么这个客户端就是 ) { return new InterceptingClientHttpRequest(requestFactory, this.interceptors, uri, httpMethod); } > interceptors, URI uri, HttpMethod method) { this.requestFactory = requestFactory; this.interceptors
", Integer.class, 15000)); requestFactory.setConnectTimeout(env.getProperty("client.http.request.connectTimeout ", Integer.class, 3000)); RestTemplate rt = new RestTemplate(requestFactory); return /就不能用ip等形式来请求其他服务 @Bean public RestTemplate restTemplate() { SimpleClientHttpRequestFactory requestFactory ", Integer.class, 15000)); requestFactory.setConnectTimeout(env.getProperty("client.http.request.connectTimeout ", Integer.class, 3000)); RestTemplate rt = new RestTemplate(requestFactory); return
RequestFactory requestFactory = RequestFactory.parseAnnotations(retrofit, method); //检查:articleList return HttpServiceMethod.parseAnnotations(retrofit, method, requestFactory); } 先看1. RequestFactory.parseAnnotations, //RequestFactory.java static RequestFactory parseAnnotations(Retrofit return new RequestFactory(this); } } 得到RequestFactory后,看2. requestFactory) { //省略kotlin协程逻辑...
, @Nullable List<ClientHttpRequestInterceptor> interceptors) { super(requestFactory); this.interceptors ) { //最终包装行为体现在InterceptingClientHttpRequest中 return new InterceptingClientHttpRequest(requestFactory ClientHttpRequest delegate = requestFactory.createRequest(request.getURI(), method); ... ; public LoadBalancerInterceptor(LoadBalancerClient loadBalancer, LoadBalancerRequestFactory requestFactory ) { this.loadBalancer = loadBalancer; this.requestFactory = requestFactory; } public LoadBalancerInterceptor
相关的method注解解析都放到ServiceMethod中,有两个关键函数调用,分别是RequestFactory与HttpServiceMethod的parseAnnotations()方法。 static <T> ServiceMethod<T> parseAnnotations(Retrofit retrofit, Method method) { RequestFactory requestFactory ); } RequestFactory 首先RequestFactory中的parseAnnotations()最终通过build()方法来构建一个RequestFactory,用来保存解析出来的方法信息 return new RequestFactory(this); } 可以看到主要分为两步: 通过parseMethodAnnotation来解析出请求的方式,例如GET、POST与PUT等等 requestFactory) { boolean isKotlinSuspendFunction = requestFactory.isKotlinSuspendFunction;
GenericFilterBean { private String rolePrefix = "ROLE_"; private HttpServletRequestFactory requestFactory } private void updateFactory() { String rolePrefix = this.rolePrefix; this.requestFactory private HttpServletRequestFactory createServlet3Factory(String rolePrefix) { HttpServlet3RequestFactory factory = new HttpServlet3RequestFactory(rolePrefix); factory.setTrustResolver(this.trustResolver factory.setLogoutHandlers(this.logoutHandlers); return factory; } } doFilter方法中调用requestFactory.create
修改推送代码(方式一) SimpleClientHttpRequestFactory requestFactory = new SimpleClientHttpRequestFactory(); requestFactory.setConnectTimeout(20000); requestFactory.setReadTimeout(20000); RestTemplate restTemplate = new RestTemplate(requestFactory); 思考 有没有配置文件可以进行配置,而不用每次set配置呢?
private RestTemplate createRestTemplate(){ HttpComponentsClientHttpRequestFactory requestFactory = new HttpComponentsClientHttpRequestFactory() requestFactory.setConnectTimeout(connectTimeout); requestFactory.setReadTimeout (readTimeout); RestTemplate restTemplate = new RestTemplate(requestFactory); restTempate.getMessageConverters
timeOut() { RestTemplate restTemplate = new RestTemplate(); SimpleClientHttpRequestFactory requestFactory = new SimpleClientHttpRequestFactory(); requestFactory.setConnectTimeout(1000); requestFactory.setReadTimeout (1000); restTemplate.setRequestFactory(requestFactory); long start = System.currentTimeMillis
.setSSLSocketFactory(csf) .build(); HttpComponentsClientHttpRequestFactory requestFactory = new HttpComponentsClientHttpRequestFactory(); requestFactory.setHttpClient (httpClient); RestTemplate restTemplate = new RestTemplate(requestFactory); return restTemplate
.setSSLSocketFactory(csf) .build(); HttpComponentsClientHttpRequestFactory requestFactory = new HttpComponentsClientHttpRequestFactory(); requestFactory.setHttpClient (httpClient); RestTemplate restTemplate = new RestTemplate(requestFactory); return restTemplate
先来段代码意思一下: function RequestFactory( url, type, data ){ if( data==undefined ) data = ''; this.getData function(){ $.ajax({ url:url, type: type, data: data, success:success }) } } var req1 = new RequestFactory ('api.xx.com', 'post', {data:123}); req1.getData(); var req2 = new RequestFactory('img.xx.com', 'get'
BufferingClientHttpRequestFactory @Bean public RestTemplate restTemplate() { SimpleClientHttpRequestFactory requestFactory BufferingClientHttpRequestFactory simpleBufferingClientHttpRequest = new BufferingClientHttpRequestFactory(requestFactory ); requestFactory.setConnectTimeout(5000); requestFactory.setReadTimeout(3500);
requestFactory = RequestFactory.parseAnnotations(retrofit, method); //获取方法的返回类型 Type returnType } //最终使用到HttpServiceMethod类 return HttpServiceMethod.parseAnnotations(retrofit, method, requestFactory requestFactory) { CallAdapter<ResponseT, ReturnT> callAdapter = createCallAdapter(retrofit, method ); okhttp3.Call.Factory callFactory = retrofit.callFactory; return new HttpServiceMethod<>(requestFactory @Override ReturnT invoke(Object[] args) { return callAdapter.adapt( new OkHttpCall<>(requestFactory
public class RestTemplateConfiguration { @Bean public OkHttp3ClientHttpRequestFactory okHttp3RequestFactory (){ OkHttp3ClientHttpRequestFactory requestFactory = new OkHttp3ClientHttpRequestFactory(); requestFactory.setConnectTimeout(2000); requestFactory.setReadTimeout(60000); return requestFactory; } @Bean @LoadBalanced public RestTemplate restTemplate(OkHttp3ClientHttpRequestFactory okHttp3RequestFactory){ return new RestTemplate(okHttp3RequestFactory); } } 为了使用ribbon负载均衡
) { return new LoadBalancerInterceptor(loadBalancerClient, requestFactory); } @Bean @ConditionalOnMissingBean LoadBalancerClient loadBalancerClient, LoadBalancerRetryProperties properties, LoadBalancerRequestFactory requestFactory loadBalancedRetryFactory) { return new RetryLoadBalancerInterceptor(loadBalancerClient, properties, requestFactory ; public LoadBalancerInterceptor(LoadBalancerClient loadBalancer, LoadBalancerRequestFactory requestFactory ) { this.loadBalancer = loadBalancer; this.requestFactory = requestFactory; } public LoadBalancerInterceptor