news 2026/10/21 2:28:30

RestTemplate配置httpcliet

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
RestTemplate配置httpcliet

yaml配置类

# http线程池 http-pool:# 对同一个目标域名/IP:端口,最多建立多少个连接 maxPerRoute:200# 当前应用调用所有下游服务时,连接池最多保留多少个连接 maxTotal:1000# 从连接池租借连接的最长等待时间,单位:毫秒 connectionRequestTimeout:10000#TCP建连超时,单位:毫秒 connectTimeout:5000# 建连后等待下游响应数据的超时时间,单位:毫秒 socketTimeout:10000# 空闲连接回收时间,单位:分钟 maxIdleTime:5
@ConfigurationpublicclassClientHttpPoolConfiguration{privatestaticfinallongDEFAULT_KEEP_ALIVE_MILLIS=20_000L;@AutowiredprivateHttpConnectionPoolConfigurationpoolConfiguration;@BeanpublicPoolingHttpClientConnectionManagerpoolingHttpClientConnectionManager(){PoolingHttpClientConnectionManagerresult=newPoolingHttpClientConnectionManager();result.setDefaultMaxPerRoute(poolConfiguration.getMaxPerRoute());result.setMaxTotal(poolConfiguration.getMaxTotal());returnresult;}@BeanpublicRequestConfigrequestConfig(){returnRequestConfig.custom().setConnectionRequestTimeout(poolConfiguration.getConnectionRequestTimeout()).setConnectTimeout(poolConfiguration.getConnectTimeout()).setSocketTimeout(poolConfiguration.getSocketTimeout()).build();}@BeanpublicCloseableHttpClienthttpClient(PoolingHttpClientConnectionManagerconnectionManager,RequestConfigrequestConfig){returnHttpClientBuilder.create().setConnectionManager(connectionManager).setDefaultRequestConfig(requestConfig).setKeepAliveStrategy((response,context)->{HeaderElementIteratoriterator=newBasicHeaderElementIterator(response.headerIterator(HTTP.CONN_KEEP_ALIVE));while(iterator.hasNext()){HeaderElementelement=iterator.nextElement();Stringname=element.getName();Stringvalue=element.getValue();if("timeout".equalsIgnoreCase(name)&&StringUtils.isNumeric(value)){returnLong.parseLong(value)*1000L;}}returnDEFAULT_KEEP_ALIVE_MILLIS;}).evictExpiredConnections().evictIdleConnections(poolConfiguration.getMaxIdleTime(),TimeUnit.MINUTES).build();}@BeanpublicPoolingHttpClientConnectionManagerpoolingHttpClientConnectionManager(){PoolingHttpClientConnectionManagermanager=newPoolingHttpClientConnectionManager();manager.setDefaultMaxPerRoute(poolConfiguration.getMaxPerRoute());manager.setMaxTotal(poolConfiguration.getMaxTotal());// 连接空闲超过 2 秒,再借出前进行有效性校验manager.setValidateAfterInactivity(2_000);returnmanager;}}
@Component@ConfigurationProperties(prefix="http-pool")@DatapublicclassHttpConnectionPoolConfiguration{/** * 对同一个目标域名/IP:端口,最多建立多少个连接 */privateIntegermaxPerRoute;/** * 当前应用调用所有下游服务时,连接池最多保留多少个连接 */privateIntegermaxTotal;/** * 从连接池租借连接的最长等待时间,单位:毫秒 */privateIntegerconnectionRequestTimeout;/** * TCP 建连超时,单位:毫秒 */privateIntegerconnectTimeout;/** * 建连后等待下游响应数据的超时时间,单位:毫秒 */privateIntegersocketTimeout;/** * 空闲连接回收时间,单位:分钟 */privateIntegermaxIdleTime;/** * 连接空闲超过 2 秒,再借出前进行有效性校验 */privateIntegervalidateAfterInactivity;}
@Configuration@Slf4jpublicclassRestTemplateConfiguration{@BeanpublicRestTemplaterestTemplate(HttpClienthttpClient){HttpComponentsClientHttpRequestFactoryfactory=newHttpComponentsClientHttpRequestFactory(httpClient);RestTemplaterestTemplate=newRestTemplate(factory);restTemplate.getMessageConverters().removeIf(converter->converterinstanceofStringHttpMessageConverter);restTemplate.getMessageConverters().add(0,newStringHttpMessageConverter(StandardCharsets.UTF_8));restTemplate.setErrorHandler(newMyResponseErrorHandler());returnrestTemplate;}}
@Slf4jpublicclassMyResponseErrorHandlerextendsDefaultResponseErrorHandler{@OverridepublicvoidhandleError(URIurl,HttpMethodmethod,ClientHttpResponseresponse)throwsIOException{log.error("RestTemplate调用失败, url={}, method={}, statusCode={}",url,method.name(),response.getStatusCode().value());super.handleError(url,method,response);}}
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/20 16:22:33

2025最强NodeJS京东自动化开发指南:从入门到精通

2025最强NodeJS京东自动化开发指南:从入门到精通 前言:解放双手的京东生态自动化方案 你是否还在每天手动完成京东签到、农场浇水、领豆任务?是否因错过限时活动而懊悔?本项目通过NodeJS生态打造的全自动化脚本体系,已…

作者头像 李华
网站建设 2026/10/19 1:59:28

AnyPS5:打造PS5玩家的折扣监控与素材整理辅助工具

如果你也有一台PS5,大概会在某个周末深夜面对一个略显尴尬的局面:游戏库里躺着十几款买完没怎么玩的大作,截图库里堆着上千张自己都忘了何时存的画面,云存档是否同步成功全靠手感,想找人联机时群里永远只有零星的"…

作者头像 李华
网站建设 2026/10/19 1:51:32

基于PCA9422与PIC18F96J65的电池供电电源管理设计

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/19 7:41:35

PS5串流实战:不拆机不改硬件,主机变全屋可玩游戏中枢

最近我把家里落灰的主机“救”了回来,不是清灰,而是给它加了一套跨设备游玩方案,也就是这个被我命名为 AnyPS5 的小项目。一句话解释:它让主机不再锁死在客厅电视前面,而是能在卧室平板、办公笔记本、床头手机、甚至便…

作者头像 李华