文档章节

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

wangkang80
 wangkang80
发布于 2017/06/02 09:17
字数 428
阅读 1433
收藏 50

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,等组件,都会涉及到重处理,会在后续的章节中讲解


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

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

© 著作权归作者所有

共有 人打赏支持
wangkang80
粉丝 361
博文 22
码字总数 34117
作品 3
浦东
高级程序员
私信 提问
加载中

评论(10)

清尘V
清尘V

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

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

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

吐槽一下,OSC的博客评论真心【烂】,居然不能贴代码。
看这里 https://github.com/spring-projects/spring-retry#xml-configuration
其实是支持XML方式的,不过我没验证过,你可以尝试一下。
好的 谢谢 我测试一下
一书生
一书生

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

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

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

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





一书生
一书生

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

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

引用来自“wangkang80”的评论

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

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

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

引用来自“wangkang80”的评论

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

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

恩 懂得








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

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

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

引用来自“wangkang80”的评论

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

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

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

引用来自“wangkang80”的评论

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

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

恩 懂得
```






```
清尘V
清尘V

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

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

引用来自“wangkang80”的评论

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

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

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

引用来自“wangkang80”的评论

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

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

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

引用来自“wangkang80”的评论

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

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

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

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

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

引用来自“wangkang80”的评论

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

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

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

UDF 基于spring boot / spring cloud 的基础项目,脚手架,主要用于学习和实践 按照spring boot的思想,将各个不同的功能按照starter的形式拆分开来,做到灵活组合 物理架构示意 CI & CD 示意 代...

wangkang80
2017/08/27
344
0
Spring Retry重试机制

在调用第三方接口或者使用mq时,会出现网络抖动,连接超时等网络异常,所以需要重试。为了使处理更加健壮并且不太容易出现故障,后续的尝试操作,有时候会帮助失败的操作最后执行成功。例如,...

aoho
2018/05/09
0
0
Spring Cloud Edgware新特性之四:Zuul routes端点功能增强

Spring Cloud是当前炙手可热的微服务开发框架。它的功能强大,组件丰富,设计优雅。目前Spring Cloud还在不断发展之中。 Spring Cloud即将发布Spring Cloud Edgware 版本。该版本解决了不少B...

周立_ITMuch
2017/10/27
0
0
久等了,SOFABoot 3.0 正式发布,支持 Spring Boot 2.0

前言 久等了!SOFABoot 正式发布 3.0.0,支持 Spring Boot 2.0~~ SOFABoot 是蚂蚁金服开源的基于 Spring Boot 的研发框架,它在 Spring Boot 的基础上,提供了诸如 Readiness Check,类隔离...

张奇龙
2018/11/16
2.2K
1
spring-boot-admin 2.0小试牛刀

序 本文主要展示下spring-boot-admin 2.0版本的新特性 server实例 maven 配置 config client实例 maven 配置 这里配置admin server的地址 运行实例 wallboard wallboard 实例详情 applicatio...

go4it
2018/05/21
0
0

没有更多内容

加载失败,请刷新页面

加载更多

node调用dll

先安装python2.7 安装node-gyp cnpm install node-gyp -g 新建一个Electron-vue项目(案例用Electron-vue) vue init simulatedgreg/electron-vue my-project 在package.json中的scripts里添......

Chason-洪
15分钟前
0
0
Linux系统快速查找文件的技巧

Linux常用命令中,有些命令可以帮助我们查找二进制文件,帮助手册或源文件的位置,也有的命令可以帮助我们查找磁盘上的任意文件,今天我们就来看看这些命令如何使用。 which which命令会在P...

Linux就该这么学
17分钟前
0
0
dotConnect for Oracle入门指南(八):通过OracleCommand类使用存储过程

【下载dotConnect for Oracle最新版本】 dotConnect for Oracle(原名OraDirect.NET)建立在ADO.NET技术上,为基于Oracle数据库的应用程序提供完整的解决方案。它为设计应用程序结构带来了新的...

电池盒
18分钟前
0
0
JavaScript是如何工作的:深入类和继承内部原理 + Babel和TypeScript 之间转换

摘要: 深入JS系列15。 原文:深入类和继承内部原理 + Babel和TypeScript 之间转换 作者:前端小智 Fundebug经授权转载,版权归原作者所有。 这是专门探索 JavaScript 及其所构建的组件的系列...

Fundebug
28分钟前
1
0
js 引用传值问题踩坑

先自测一下,答案在最下边。 <html><head><script type="text/javascript" src="/jquery/jquery.js"></script><script type="text/javascript">$(document).ready(function(){$("button......

S三少S
39分钟前
12
1

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部