`

RestTemplate添加超时处理ClientHttpRequestFactory的选择。

 
阅读更多
       最近在搭建一个前端架构,其中用到RestTemplate和AsyncRestTemplate的工具的集成,总结一下集
成该工具时的处理方式。

 

1:分析如何才能处理超时设置(方式之一)

 

先熟悉一下Spring RestTemplate的源码。

 

public class RestTemplate extends InterceptingHttpAccessor implements RestOperations {

	public RestTemplate(ClientHttpRequestFactory requestFactory) {
		this();
		setRequestFactory(requestFactory);
	}

}

 

 

RestTemplate通过setRequestFactory重写了抽象类的HttpAccessor的方法

 

public abstract class HttpAccessor {

	private ClientHttpRequestFactory requestFactory = new SimpleClientHttpRequestFactory();

	public void setRequestFactory(ClientHttpRequestFactory requestFactory) {
		this.requestFactory = requestFactory;
	}
	
}

 

 我们发现this.requestFactory 默认是没有超时时间处理的。

 

 

public class SimpleClientHttpRequestFactory implements ClientHttpRequestFactory, AsyncClientHttpRequestFactory {

	private int connectTimeout = -1;

	private int readTimeout = -1;

}

 

 

2:设置超时处理

 

		SimpleClientHttpRequestFactory requestFactory = new SimpleClientHttpRequestFactory();
		requestFactory.setConnectTimeout(10000);
		requestFactory.setReadTimeout(10000);

初始化RestTemplate时将requestFactory覆盖HttpAccessor的requestFactory,这个你懂的。

 

3:合理吗

 

查看RestTemplate源码,execute()都要执行如下方法。

 

 

/**代码有省略**/
protected <T> T doExecute(URI url, HttpMethod method, RequestCallback requestCallback,
			ResponseExtractor<T> responseExtractor) throws RestClientException {
		ClientHttpResponse response = null;
		try {
			ClientHttpRequest request = createRequest(url, method);
			response = request.execute();
		}
		catch (IOException ex) {
		}
		finally {
			if (response != null) {
				response.close();
			}
		}
	}

 

 

最终执行createRequest(url, method)是ClientHttpRequestFactory接口



 

 

     观察实现方法,对比HttpComponentsClientHttpRequestFactory和SimpleClientHttpRequestFactory,前者是用连接池管理数据库的链接,后者是每次调用restTemplate时都要打开一个链接,然后关闭,性能稍差一些。

 

 

更多:

a  关于Netty4和Netty4ClientHttpRequestFactory的知识,参考开源中国的文章

 

  • 大小: 48.1 KB
分享到:
评论

相关推荐

    精讲RestTemplate自定义请求失败异常处理.docx

    在使用Spring框架中的`RestTemplate`进行HTTP请求时,我们可能会遇到各种异常情况,如服务超时、服务不存在等,这些异常通常会导致程序中断,无法继续执行后续代码。在这种情况下,我们希望即使请求失败,也能获取到...

    RestTemplate请求失败自动重试机制.docx

    在上一节中,我们学习了如何自定义RestTemplate的异常处理,但那并不适用于自动重试。本节我们将探讨如何利用Spring Retry库来实现RestTemplate的自动重试机制。 首先,为了启用Spring Retry,我们需要在项目中引入...

    Java自定义异常处理

    Java自定义异常处理详细介绍,包括了很多比较经典的案例,可以自己研究自定义异常

    Android超时处理

    在Android开发中,网络操作是应用与服务器交互的重要部分,涉及到的数据访问往往伴随着各种问题,如网络连接状态、接口返回状态、异常处理以及超时问题。"Android超时处理"这个话题聚焦于如何在Android应用中优雅地...

    Ajax请求session超时处理流程

    Ajax请求session超时处理流程 java服务器端处理: SessionValidateFilter中修改: if (ServerInfo.isAjax(request)) { request.setAttribute("statusCode", 301); request.setAttribute("message", "Session ...

    FTP超时处理.rar

    FTP超时处理.rar FTP超时处理.rar FTP超时处理.rar FTP超时处理.rar FTP超时处理.rar FTP超时处理.rar

    为jquery的ajax请求添加超时timeout时间的操作方法

    总结以上所述,为jQuery的Ajax请求添加超时时间的操作方法能够让开发者更加主动地管理网络请求的行为,提升应用的响应速度和用户体验。通过合理设置timeout值,并结合success、error和complete回调函数,可以在不同...

    RestTemplate实现服务间调用demo案例

    6. **异常处理**:在实际开发中,我们需要处理可能出现的网络、超时、认证失败等异常。可以通过全局异常处理器或者自定义拦截器来捕获和处理这些异常。 7. **安全考虑**:在服务间通信中,安全问题不容忽视。可以...

    使用RestTemplate进行feignclient调用

    如果需要添加拦截器、设置超时时间等高级功能,可以使用 RestTemplateBuilder 来构建。 2. **构建请求**: 确定要调用的远程服务的 URL、HTTP 方法、请求头和请求体。例如,如果你有一个服务提供者接口定义如下:...

    M3-USART1超时处理完美版

    本资源"**M3-USART1超时处理完美版**"显然聚焦于STM32处理器的UART(通用异步收发传输器)通信功能的优化,特别是针对超时处理的解决方案。UART是一种串行通信接口,常用于设备间的短距离通信,如传感器、显示器和...

    java 访问网络 下载文件 爬虫 超时处理解决方案

    在IT领域,尤其是在Java编程中,访问网络、下载文件、实现爬虫功能以及处理超时问题是非常关键的技术点。本文将深入探讨如何在Java中有效处理这些方面的问题,特别是超时处理解决方案,这对于构建高效、稳定的网络...

    .net 等待超时处理的demo

    在描述中提到的"SequenceQueue"可能是一个自定义的数据结构或队列实现,它可能用于处理顺序数据的添加和消费。在多线程环境中,如果需要确保数据的顺序性,这样的队列可能会用到同步原语如`Monitor`, `Mutex`, 或者`...

    RestTemplate的使用及需要注意的地方

    默认支持JSON和XML,但如果你想处理其他格式,如Protobuf或CSV,需要自定义并添加`MessageConverter`。 5. **性能优化**:在高负载场景下,可以考虑使用`Apache HttpClient`作为基础客户端,因为它提供了更丰富的...

    PHP超时处理全面总结.docx

    1. **Web服务器超时处理** - **Apache**:在Apache服务器中,当使用FastCGI与PHP-FPM集成时,存在三个关键的超时设置。缺省情况下,FastCGI的连接超时通常设置为30秒。若需要调整,可以在`httpd.conf`中修改`...

    springRestTemplate

    为了控制请求的执行时间,RestTemplate 允许我们设置连接超时和读取超时。可以通过以下方式设置: ```java SimpleClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory(); factory....

    spring rest mvc使用RestTemplate调用

    在实际项目中,根据需求选择适当的HTTP方法、设置请求头、处理异常,以及选择合适的转换器,都是使用`RestTemplate`时需要考虑的关键点。在进行更高级的网络编程时,也可以考虑升级到`WebClient`以获得更好的性能和...

Global site tag (gtag.js) - Google Analytics