文档章节

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

wangkang80
 wangkang80
发布于 2017/06/02 09:17
字数 428
阅读 1340
收藏 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
粉丝 355
博文 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

没有更多内容

加载失败,请刷新页面

加载更多

记Structured Streaming 2.3.1的OOM排查过程

记Structured Streaming 2.3.1的OOM排查过程 缘起 最近在使用Structured Streaming开发一套自助配置SQL的来生成流式作业的平台,在测试的过程中发现有些作业长时间运行后会有Executor端的OOM...

纳兰清风
10分钟前
0
0
通过 websocket 连接 openfire

通过 websocket 连接 openfire 一、简介 老版本是需要安装websocket插件的。之前版本就不说了。 二、 引入XML与JSON互转的js <script src="lib/XML/ObjTree.js"></script><script src="lib......

lwenhao
13分钟前
0
0
MicropPython的学习,如何从0到1?

是Java还是C++ ? 是Go还是Python? 你为你最爱或者最熟悉的编程语言打Call了吗? Python在国外是一门非常热门的编程语言,近些年在国内也被发掘与追捧, Python的开放、简洁、黏合正符合了现发...

bodasisiter
15分钟前
0
0
Django框架17: Celery的使用

Celery介绍 1.什么是Celery Celery是一个python模块,它在官网的定义:Celery is asynchronous task queue/job based on distributed message passing. It is focused on real-time operatio......

代码打碟手
21分钟前
0
0
poi的excel解析工具类

import org.apache.commons.lang.StringUtils;import org.apache.commons.lang.time.DateFormatUtils;import org.apache.commons.lang.time.DateUtils;import org.apache.poi.hssf.use......

Sheav
24分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部