文档章节

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

wangkang80
 wangkang80
发布于 2017/06/02 09:17
字数 428
阅读 1382
收藏 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
粉丝 360
博文 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
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
spring-boot-admin 2.0小试牛刀

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

go4it
05/21
0
0
中小企业对Spring Cloud微服务架构实践经验总结的一些思考

Spring Cloud 在国内中小型公司能用起来吗?从 2016 年初一直到现在,我们在这条路上已经走了一年多。 在使用 Spring Cloud 之前,我们对微服务实践是没有太多的体会和经验的。从最初的开源软...

Java大蜗牛
08/13
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Spring核心概念--Spring01

小生初出程序茅庐,走上编程之路,还请各位大佬多多管照。 初学Spring框架: 创建HelloWorldSpring项目 用eclipse开发Web项目,添加jar包: commons-logging-1.2.jar log4j-1.2.17.jar spring-...

小橙子的曼曼
2分钟前
0
0
MySQL 运行状态监控方法

一、通过shell脚本监控mysql的qps,tps,io详细见附件脚本《mysqlgather.sh》 因在脚本中直接设置密码会提示告警信息,需要在my.cnf文件中的[client]标签下增加默认的用户名和密码,并重启mys...

PeakFang-BOK
7分钟前
0
0
ROS实操笔记 四 topic (主题)

主题 消息以一种发布/订阅的方式传递。一个节点可以在一个给定的主题中发布消息。一个节点针对某个主题关注与订阅特定类型的数据。可能同时有多个节点发布或者订阅同一个主题的消息。总体上,...

placido
7分钟前
0
0
【NLP】【六】gensim之doc2vec

【一】总述 doc2vec是指将句子、段落或者文章使用向量来表示,这样可以方便的计算句子、文章、段落的相似度。 【二】使用方法介绍 1. 预料准备 def read_corpus(fname, tokens_only=False):...

muqiusangyang
10分钟前
0
0
node中process.nextTick & promise & 异步IO & setTimeout & setImmediate 的优先级

process.nextTick > promise > setTimeout > 异步IO > setImmediate

小草先森
16分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部