resttemplate异步请求,resttemplate异常处理
00-1010前言1。SpringRetry配置生效2。用例3。试验结果
00-1010本文是关于RestTemplate的第八篇文章。上一篇文章的博客访问地址如下:
RestTemplate采用春季或非春季环境下的强化授课。
RestTemplate实现了各种底层HTTP客户端类库的切换使用。
解释如何使用RestTemplate发送HTTPGET请求
解释如何使用RestTemplate发送HTTPPOST请求
RestTemplate的请求方法,比如DELETE和PUT,使用了密集授课。
RestTemplate文件的上传和下载以及大文件的流式下载
RestTemplate自定义请求失败的异常处理实例分析
在上一节中,我们介绍了RestTemplate启动远程请求异常时的自定义处理方法。我们可以用自定义的方式解析HTTP状态码状态码,然后根据状态码和业务需求决定下一步如何处理程序。本节介绍另一种通用的异常处理机制:自动重试。也就是说,当RestTemplate发送请求并得到非200状态的结果时,它会以一定的间隔再次发送n次请求。n次请求失败后,最终抛出HttpClientErrorException。在开始本节的代码之前,注释掉上一节中RestTemplate自定义异常处理的代码,否则自动重试机制将不会生效。如下(参考上一节代码):
//rest template . set error handler(new MyRestErrorHandler());
00-1010通过maven坐标引入弹簧重试。spring-retry的实现依赖于面向方面的编程,所以引入了aspectjweaver。以下配置过程均基于Spring Boot应用。
相关性groupIdorg.springframework.retry/groupId artifactId spring-retry/artifactId version1.2.5.RELEASE/version/相关性相关性组Id组织。AspectJ/GroupID ArtifactIDSpectjWeaver/ArtifactID/Dependency在Spring Boot应用门户的启动类即配置类中添加@SpringRetry注释,表示重试机制将生效。
00-1010编写一个模拟的业务类RetryService,将RestTemplate注入其中。
RestTemplate实例化Bean配置参考:
RestTemplate采用春季或非春季环境下的强化授课。
RestTemplate实现了各种底层HTTP客户端类库的切换使用。
将正确的请求服务地址从“/posts/1”更改为“/posts/1”。服务不存在,因此抛出404异常来触发重试机制。
@Servicepublic类retry service { @ Resource private rest template rest template;private static final datetime FORMATTER DATE _ TIME _ FORMATTER=datetime FORMATTER . of pattern( yyyy-MM-DD hh :MM : ss );@ retry able(value=rest client exception . class,maxAttempts=3,backoff=@Backoff(delay=5000L,Multiplier=2))public http status test entity(){ system . out . println( Initiate remote API request 3360 date _ time _ formatter . format(local datetime . now()));string URL= http://jsonplaceholder . typicode.com/postss/1 ;response entity string response entity=rest template . getforentity(URL,string . class);返回response entity . getstatuscode();//获取响应代码的方法}}@Retryable批注会在异常发生时重试。参数描述:
值:当指定的异常发生时,将重试该异常。HttpClientErrorException是RestClientException的子类。
Include:和value一样,默认为空。如果exclude也为空,则重试所有异常。
Exclude:指定将不重试该异常,默认情况下为空。如果include也为空,则重试所有异常。
最大重试次数,默认值为3。
返回:重试等待策略,默认为空。
@Backoff注释是重试等待的策略,参数描述为:
Delay:指定重试的延迟时间,默认为1000毫秒。
乘数:指定延迟的倍数。例如,当延迟=5000且乘数=2时,第一次重试为5秒,第二次重试为10(5x2)秒,第三次重试为20(10x2)秒。
编写一个测试RetryController来调用RetryService的testEntity方法。
@ RestControllerpublic class retry controller { @ Resource private retry service retry service;@ get mapping(/retry )public http status test(){ return retry service . test entity();}}
在10-1010,向http://localhost:8080/retry发出请求,结果如下:
从结果可以看出:
第一次请求失败后,延迟5秒钟再试。
第二次请求失败后,延迟10秒钟再试。
第三个请求失败后,会引发异常。
以上是RestTemplate请求失败自动重启机制的详细内容。更多关于RestTemplate请求失败自动重启的信息,请关注风行IT的其他相关文章!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。