spring boot / cloud (七) 使用@Retryable来进行重处理
spring boot / cloud (七) 使用@Retryable来进行重处理
wangkang80 发表于6个月前
spring boot / cloud (七) 使用@Retryable来进行重处理
  • 发表于 6个月前
  • 阅读 1110
  • 收藏 49
  • 点赞 2
  • 评论 10

腾讯云 技术升级10大核心产品年终让利>>>   

spring boot / cloud (七) 使用@Retryable来进行重处理

##前言

###什么时候需要重处理?

>在实际工作中,重处理是一个非常常见的场景,比如:发送消息失败,调用远程服务失败,争抢锁失败,等等,这些错误可能是因为网络波动造成的,等待过后重处理就能成功.通常来说,会用try/catch,while循环之类的语法来进行重处理,但是这样的做法缺乏统一性,并且不是很方便,要多写很多代码.然而spring-retry却可以通过注解,在不入侵原有业务逻辑代码的方式下,优雅的实现重处理功能.

##思路

使用@Retryable和@Recover实现重处理,以及重处理失后的回调

##实现

###1.pom引用

<dependency>
  <groupId>org.springframework.retry</groupId>
  <artifactId>spring-retry</artifactId>
</dependency>

###2.应用启动类开启retry

....其他注解
@EnableRetry
public class BaseApplication {
    .......
}

###3.在指定方法上标记@Retryable来开启重试

  @Retryable(value={A异常.class,B异常.class},
             maxAttempts=重试次数,
             backoff = @Backoff(value = 每次重试延迟毫秒数))
  public Integer retry() {
    LOGGER.info("测试retry");
    final int a = 5;
    int num = new SecureRandom().nextInt();
    if (num % a == 0) {
      return num;
    }
    throw new RetryException("重试失败");
  }

###4.在指定方法上标记@Recover来开启重试失败后调用的方法(注意,需跟重处理方法在同一个类中)

  @Recover
  public void recover(A异常 e) {
    // ... do something
  }
  
  @Recover
  public void recover(B异常 e) {
    // ... do something
  }

##结束

演示了单spring boot的应用的,在后续的cloud场景中,如:zuul,等组件,都会涉及到重处理,会在后续的章节中讲解


想获得最快更新,请关注公众号

想获得最快更新,请关注公众号

标签: spring 重处理 retry
共有 人打赏支持
粉丝 327
博文 21
码字总数 33058
作品 3
评论 (10)
清尘V
从网上看到的DEMO都是基于注解,是否有xml配置方式?不一定是SpringBoot,基本的Spring使用
wangkang80

引用来自“清尘-呵呵”的评论

从网上看到的DEMO都是基于注解,是否有xml配置方式?不一定是SpringBoot,基本的Spring使用
这个貌似没有xml的配置,为何有此需求?
清尘V

引用来自“清尘-呵呵”的评论

从网上看到的DEMO都是基于注解,是否有xml配置方式?不一定是SpringBoot,基本的Spring使用

引用来自“wangkang80”的评论

这个貌似没有xml的配置,为何有此需求?
平时开发项目中(SSM)还是用XML居多
wangkang80

引用来自“清尘-呵呵”的评论

从网上看到的DEMO都是基于注解,是否有xml配置方式?不一定是SpringBoot,基本的Spring使用

引用来自“wangkang80”的评论

这个貌似没有xml的配置,为何有此需求?

引用来自“清尘-呵呵”的评论

平时开发项目中(SSM)还是用XML居多
这个东西的使用,跟spring是一样的,本身就是注解的.
清尘V

引用来自“清尘-呵呵”的评论

从网上看到的DEMO都是基于注解,是否有xml配置方式?不一定是SpringBoot,基本的Spring使用

引用来自“wangkang80”的评论

这个貌似没有xml的配置,为何有此需求?

引用来自“清尘-呵呵”的评论

平时开发项目中(SSM)还是用XML居多

引用来自“wangkang80”的评论

这个东西的使用,跟spring是一样的,本身就是注解的.
恩 懂得
一书生

引用来自“清尘-呵呵”的评论

从网上看到的DEMO都是基于注解,是否有xml配置方式?不一定是SpringBoot,基本的Spring使用

引用来自“wangkang80”的评论

这个貌似没有xml的配置,为何有此需求?

引用来自“清尘-呵呵”的评论

平时开发项目中(SSM)还是用XML居多

引用来自“wangkang80”的评论

这个东西的使用,跟spring是一样的,本身就是注解的.

引用来自“清尘-呵呵”的评论

恩 懂得
```






```
一书生

引用来自“清尘-呵呵”的评论

从网上看到的DEMO都是基于注解,是否有xml配置方式?不一定是SpringBoot,基本的Spring使用

引用来自“wangkang80”的评论

这个貌似没有xml的配置,为何有此需求?

引用来自“清尘-呵呵”的评论

平时开发项目中(SSM)还是用XML居多

引用来自“wangkang80”的评论

这个东西的使用,跟spring是一样的,本身就是注解的.

引用来自“清尘-呵呵”的评论

恩 懂得








See https://github.com/spring-projects/spring-retry
一书生

引用来自“清尘-呵呵”的评论

从网上看到的DEMO都是基于注解,是否有xml配置方式?不一定是SpringBoot,基本的Spring使用





一书生

引用来自“清尘-呵呵”的评论

从网上看到的DEMO都是基于注解,是否有xml配置方式?不一定是SpringBoot,基本的Spring使用
吐槽一下,OSC的博客评论真心【烂】,居然不能贴代码。
看这里 https://github.com/spring-projects/spring-retry#xml-configuration
其实是支持XML方式的,不过我没验证过,你可以尝试一下。
清尘V

引用来自“清尘-呵呵”的评论

从网上看到的DEMO都是基于注解,是否有xml配置方式?不一定是SpringBoot,基本的Spring使用

引用来自“一书生”的评论

吐槽一下,OSC的博客评论真心【烂】,居然不能贴代码。
看这里 https://github.com/spring-projects/spring-retry#xml-configuration
其实是支持XML方式的,不过我没验证过,你可以尝试一下。
好的 谢谢 我测试一下
×
wangkang80
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: