当前位置: 移动技术网 > IT编程>开发语言>Java > spring-retry简单使用方法

spring-retry简单使用方法

2019年07月19日  | 移动技术网IT编程  | 我要评论

熊黛林身高,36岁生二胎,手机电影3gp下载

在分布式系统中,为了保证数据分布式事务的强一致性,大家在调用rpc接口或者发送mq时,针对可能会出现网络抖动请求超时情况采取一下重试操作。大家用的最多的重试方式就是mq了,但是如果你的项目中没有引入mq,那就不方便了,本文主要介绍一下如何使用spring retry实现重试操作。

1. 添加maven依赖

<dependency> 
  <groupid>org.springframework.retry</groupid> 
  <artifactid>spring-retry</artifactid> 
  <version>1.1.2.release</version> 
</dependency> 
<dependency> 
  <groupid>org.aspectj</groupid> 
  <artifactid>aspectjweaver</artifactid> 
  <version>1.5.4</version> 
</dependency> 

2. 在启动里添加重试配置

@springbootapplication 
@enableretry 
public class application { 
 
  public static void main(string[] args) { 
    springapplication.run(application.class, args); 
  } 
 
} 

3. 编写service

@service 
public class remoteservice { 
 
  private static final logger logger = loggerfactory.getlogger(testcontroller.class); 
 
  @retryable(value= {businessexception.class},maxattempts = 3,backoff = @backoff(delay = 5000l,multiplier = 2)) 
  public void call() throws exception { 
    logger.info("do something..."); 
    throw new businessexception("rpc调用异常"); 
  } 
  @recover 
  public void recover(businessexception e) { 
    logger.info(" --------------------------- "); 
    logger.info(e.getmessage()); 
  } 
} 

4. 编写controller

@restcontroller 
@requestmapping("/test") 
public class testcontroller { 
 
  private static final logger logger = loggerfactory.getlogger(testcontroller.class); 
 
  @autowired 
  private remoteservice remoteservice; 
 
  @requestmapping("/test") 
  public string login() throws exception { 
    remoteservice.call(); 
    return string.valueof("11"); 
  } 

5. 访问http://localhost:8080/test/test

6. 测试日志

2017-07-25 19:28:07 [info]-[http-nio-53602-exec-1]-[com.test.retry.service.remoteservice.call(remoteservice.java:19)] do something... 
2017-07-25 19:28:12 [info]-[http-nio-53602-exec-1]-[com.test.retry.service.remoteservice.call(remoteservice.java:19)] do something... 
2017-07-25 19:28:22 [info]-[http-nio-53602-exec-1]-[com.test.retry.service.remoteservice.call(remoteservice.java:19)] do something... 
2017-07-25 19:28:22 [info]-[http-nio-53602-exec-1]-[com.test.retry.service.remoteservice.recover(remoteservice.java:24)]  ---------------------------   
2017-07-25 19:28:22 [info]-[http-nio-53602-exec-1]-[com.test.retry.service.remoteservice.recover(remoteservice.java:25)] rpc调用异常 

7. 相关配置说明

@enableretry能否重试当proxytargetclass属性为true时,使用cglib代理。默认使用标准java注解。在spring boot中此参数写在程序入口即可。

@retryable 标注此注解的方法在发生异常时会进行重试
            value:指定处理的异常类

            include:指定处理的异常类和value一样,默认为空,当exclude也为空时,默认所有异常

            exclude:指定异常不处理,默认空,当include也为空时,默认所有异常

            maxattempts:最大重试次数。默认3次

            backoff: 重试等待策略。默认使用@backoff注解

@backoff 重试等待策略
            不设置参数时,默认使用fixedbackoffpolicy(指定等待时间),重试等待1000ms

            设置delay,使用fixedbackoffpolicy(指定等待时间),重试等待填写的时间

            设置delay和maxdealy时,重试等待在这两个值之间均态分布

            设置delay、maxdealy、multiplier,使用 exponentialbackoffpolicy(指数级重试间隔的实现 ),multiplier即指定延迟倍数,比如delay=5000l,multiplier=2,则第一次重试为5秒,第二次为10秒,第三次为20秒……

@recover 用于@retryable重试失败后处理方法,此注解注释的方法参数一定要是@retryable抛出的异常,否则无法识别,可以在该方法中进行日志处理。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持移动技术网。

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网