最近在搭建一个前端架构,其中用到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请求结果异常是可以自定义处理的。在开始进行自定义的异常处理逻辑之前,我们有必要看一下异常处理的默认实现。也就是:为什么会产生上面小节提到的现象? ResponseErrorHandler...
在RestTemplate发送请求得到非200状态结果的时候,间隔一定的时间再次发送n次请求。n次请求都失败之后,最后抛...在开始本节代码之前,将上一节的RestTemplate自定义异常处理的代码注释掉,否则自动重试机制不会生效。
Java自定义异常处理详细介绍,包括了很多比较经典的案例,可以自己研究自定义异常
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
网络操作涉及很多处理 需要判断网络连接状态 接口返回是否成功 失败 异常 或者超时 该demo 完整展现数据访问的处理 请大家结合实际使用
主要介绍了为jquery的ajax请求添加超时timeout时间的操作方法,文中通过一段简单的代码给大家介绍jquery ajax超时设置方法,感兴趣的朋友跟随脚本之家小编一起看看吧
易语言FTP超时处理源码,FTP超时处理,demo,WorkerFunction,API_CreateThread,API_InternetOpen,API_WaitForSingleObject,API_GetLastError,API_InternetCloseHandle,API_GetExitCodeThread,API_CloseHandle,API_...
易语言源码易语言FTP超时处理源码.rar 易语言源码易语言FTP超时处理源码.rar 易语言源码易语言FTP超时处理源码.rar 易语言源码易语言FTP超时处理源码.rar 易语言源码易语言FTP超时处理源码.rar 易语言源码...
java超时取消正则表达式匹配方法,代码超时处理,设置代码执行时间,超棒的工具类 lambda,Callable,ExecutorService,超过执行5秒退出
当某些接口超时、返回的数据有问题时需要对接口进行重试,但是有的接口需要重试三次,有的需要重试两次,有的不需要重试;有的返回连接超时才重试,...各种各样的场景,该源码实现了一个自定义定制化的重试RestTemplate
案例使用springboot2.7.9整合MyBatis+MySQL+Redis,实现向订单表添加数据后,并通过Redis的数据过期功能,实现当订单规定时间类没有处理的时候,通过监听修改订单的状态,让订单的状态从正常状态编程失效状态。...
java 访问网络 下载文件 爬虫 超时处理解决方案
M3-USART1超时处理完美版
PHP超时处理全面总结
超时处理abc
设置语音前端点:静音超时时间,即用户多长时间不说话则当做超时处理
//读取超时5秒,默认无限限制,单位:毫秒//连接超时10秒,默认无限制,单位:毫秒GitHub源码:
C语言附带超时功能的system函数,liuux版本 接口:int system_timeout(const char *cmdstring, int timeout)