c语言sscanf函数的用法是什么
235
2024-01-25
前言作为后端程序员,我们的日常工作就是调用一些第三方服务,将数据存入数据库,返回信息给前端但你不能保证所有的事情一直都很顺利像有些第三方API,偶尔会出现超时此时,我们要重试几次,这取决于你的重试策略下面举一个我在日常开发中多次看到的例子:
复制publicinterfaceOutSource{ List; } @ServicepublicclassOutSourceImplimplementsOutSource{ static
Random random = new Random(); @Overridepublic List{ //mock failureif (random.nextInt(2) ==
1) thrownew TimeOutException(); return List.of(1, 2, 3); } } @Slf4j@Service
publicclassManuallyRetryService{ @Autowiredprivate OutSource outSource; public List{ log.info(
"trigger time:{}", retryTimes); if (retryTimes > 3) { return List.of(); }
try { List 看看上面这段代码,我认为它可以正常工作,当复制retryTimes达到4时,无论如何我们都会得到最终结果但是你觉得写的好吗?优雅吗?下面我来介绍Spring中的一个组件:。
复制spring-retry,我们不妨来试一试Spring-Retry介绍使用复制spring-retry是Spring中的提供的一个重试框架,提供了注解的方式,在不入侵原有业务逻辑代码的方式下,优雅的实现重处理功能。
安装依赖如果你的是gradle应用,引入下面的依赖复制implementationorg.springframework.boot:spring-boot-starter-aoporg.springframework.boot:spring-boot-starter-aop
implementation org.springframework.retry:spring-retry如果你的项目使用的是maven项目,引入下面的依赖复制
>org.springframework.retryspring-retry
artifactId>org.springframework.boot
groupId>spring-boot-starter-aop
>启用重试功能添加复制@EnableRetry注解在入口的类上从而启用功能复制@SpringBootApplication//看过来@EnableRetry public class TestSpringApplication { 。
publicstaticvoidmain(String[] args) { SpringApplication.run(TestSpringApplication.class, args); } }
应用我们以前面的为例,看看怎么使用,如下面的代码:复制publicinterfaceOutSource{ List; } @ServicepublicclassOutSourceImplimplements
OutSource{ static Random random = new Random(); @Overridepublic List{ //mock failure will throw an exception every time
thrownew TimeOutException(); } } @Slf4j@ServicepublicclassRetryableService{ @Autowiredprivate
OutSource outSource; // 看这里@Retryable(value = {TimeOutException.class}, maxAttempts = 3)public List{ log.info(
"trigger timestamp:{}", System.currentTimeMillis() / 1000); List 关键在于复制Service层中的实现类中添加了 复制@Retryable
注解,实现了重试, 指定value是复制TimeOutException异常会进行重试,最大重试复制maxAttempts3次验证这一次,当我们访问http://localhost:8080/retryable时,我们将看到浏览器上的结果失败。
然后在你的终端上看到:复制INFO66776--- [nio-9997-exec-1] c.m.testspring.service.RetryableService : trigger timestamp:1668236840
INFO66776--- [nio-9997-exec-1] c.m.testspring.service.RetryableService : trigger timestamp:1668236841
INFO66776--- [nio-9997-exec-1] c.m.testspring.service.RetryableService : trigger timestamp:1668236842
ERROR 66776--- [nio-9997-exec-1] c.m.t.controller.RetryTestController : retryable final exception
总结本文分享了复制spring-retry重试框架最基础的使用,可以无侵入业务代码进行重试关于复制spring-retry更多的使用建议可以自己去官网https://github.com/spring-projects/spring-retry 探索。
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~