赞
踩
参考
https://blog.csdn.net/sinat_27818621/article/details/118389966
https://blog.csdn.net/m0_37779977/article/details/105707183
@Bean public ClientHttpRequestFactory clientFactory(ProxyConfig proxyConfig) { Registry<ConnectionSocketFactory> registry = RegistryBuilder.<ConnectionSocketFactory>create() .register("http", PlainConnectionSocketFactory.getSocketFactory()) .register("https", SSLConnectionSocketFactory.getSocketFactory()).build(); PoolingHttpClientConnectionManager connectionManager = new PoolingHttpClientConnectionManager(registry); connectionManager.setMaxTotal(100); connectionManager.setDefaultMaxPerRoute(200); RequestConfig requestConfig = RequestConfig.custom() .setSocketTimeout(60000) .setConnectTimeout(60000) .setConnectionRequestTimeout(10000) .setCookieSpec(CookieSpecs.STANDARD) .build(); ServiceUnavailableRetryStrategy serviceUnavailStrategy = new ServiceUnavailableRetryStrategy() { @Override public boolean retryRequest(HttpResponse httpResponse, int executionCount, HttpContext httpContext) { log.info("请求超时,重试Strategy{}次.", executionCount); return executionCount < 3; } @Override public long getRetryInterval() { return 1000; } }; CloseableHttpClient closeableHttpClient = HttpClientBuilder.create() .setDefaultRequestConfig(requestConfig) .setConnectionManager(connectionManager) .setDefaultRequestConfig(requestConfig) .setProxy(proxyConfig.getEnabled() ? new HttpHost(proxyConfig.getHost(), proxyConfig.getPort(), "http") : null) .setRetryHandler((exception, executionCount, context) -> { if (executionCount > 3) { return false; } String msg = exception.getMessage(); System.out.println("msg = " + msg); if (msg.equals("Read timed out")) { log.info("请求超时,Handler重试{}次.", executionCount); return true; } return false; }) .setServiceUnavailableRetryStrategy(serviceUnavailStrategy) .build(); return new HttpComponentsClientHttpRequestFactory(closeableHttpClient); }
疑问:setRetryHandler和setServiceUnavailableRetryStrategy按理说设置其中一个就ok,设置前者时候有时候不重试,回头有时间再整理
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。