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() {final int a = 5;int num = new SecureRandom().nextInt();if (num % a == 0) {return num;}throw new RetryException("重试失败");}

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

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

代码仓库 (博客配套代码)

  • udf-starter : 基础项目,脚手架,框架

  • udf-sample : 集成样例

结束

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


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

转载于:https://www.cnblogs.com/itkk/p/7448643.html

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

  1. Spring Boot/Cloud 界面与安全设计

    Spring Boot/Cloud 界面与安全设计 一.后端渲染 Thymeleaf 二.后端渲染 Freemarker 三.后端渲染 jsp 四.前端渲染 vue 五.原生 json 请求(自) 六 ...

  2. Spring Initializr 构建Spring Boot/Cloud工程

    2019独角兽企业重金招聘Python工程师标准>>> 在之前的所有Spring Boot和Spring Cloud相关博文中,都会涉及Spring Boot工程的创建.而创建的方式 ...

  3. 使用Intellij中的Spring Initializr来快速构建Spring Boot/Cloud工程(十五)

    在之前的所有Spring Boot和Spring Cloud相关博文中,都会涉及Spring Boot工程的创建.而创建的方式多种多样,我们可以通过Maven来手工构建或是通过脚手架等方式快速搭建,也 ...

  4. Spring Boot/Cloud干货汇总(持续更新:20180226版)

    抽空对本号推送的Spring相关内容做个汇总整理,包括: - Spring - Spring Boot - Spring cloud - 其他Spring干货内容 Spring Boot专题 基础入门 ...

  5. spring boot / cloud (二) 规范响应格式以及统一异常处理

    spring boot / cloud (二) 规范响应格式以及统一异常处理 前言 为什么规范响应格式? 我认为,采用预先约定好的数据格式,将返回数据(无论是正常的还是异常的)规范起来,有助于提高团队 ...

  6. spring boot / cloud (十七) 快速搭建注册中心和配置中心

    spring boot / cloud (十七) 快速搭建注册中心和配置中心 本文将使用spring cloud的eureka和config server来搭建. 然后搭建的模式,有很多种,本文主要聊 ...

  7. Spring Boot 2 (七):Spring Boot 如何解决项目启动时初始化资源

    Spring Boot 2 (七):Spring Boot 如何解决项目启动时初始化资源 在项目启动的时候需要做一些初始化的操作,比如初始化线程池,提前加载好加密证书等.今天就给大家介绍一个 Spri ...

  8. 使用Intellij中的Spring Initializr来快速构建Spring Boot/Cloud工程

    在之前的所有Spring Boot和Spring Cloud相关博文中,都会涉及Spring Boot工程的创建.而创建的方式多种多样,我们可以通过Maven来手工构建或是通过脚手架等方式快速搭建,也 ...

  9. Spring/Boot/Cloud系列知识(2)— — 代理模式

    本文转自:https://blog.csdn.net/yinwenjie/article/details/77848285 代理模式是23种设计模式中的一种,属于一种结构模式.用一句大白话解释这个设计 ...

最新文章

  1. 配置Open***使用User/Pass方式验证登录
  2. 算法-----------计算二叉树的最大深度
  3. 删除数据库里面所有表!
  4. php 初始化漏洞,这样做是不是不会引起PHP全局变量未初始化漏洞
  5. linux命令编写四位数密码本,grub-crypt命令 – 对口令进行加密
  6. 成都Uber优步司机奖励政策(3月17日)
  7. 每天一个linux命令(54):ping命令
  8. C++获取多维数组维数
  9. Markdown插图片模板
  10. 剑指offer刷题 04. 二维数组中的查找
  11. Javascript第七章cookie的读取和写入源码第一课
  12. python实现概率论与数理统计_【总目录】——概率论与数理统计及Python实现
  13. html去掉右侧滚动条,html中去掉textarea右侧滚动条和右下角拖拽
  14. nina数据库的采样频率_急求!!!什么是时域采样定理和频域采样定理?
  15. C#实现Omron欧姆龙PLC的Fins Tcp协议[转]
  16. 自由技艺 (Liberal arts)
  17. matlab中gurobi lic file 打不开
  18. 立体文字java_java语言 练习实现 3D立体字
  19. linux下创建二进制文件并修改
  20. 看金融海啸是如何害死蚯蚓一家的(多图杀猫)

热门文章

  1. 福州大学c语言考试答案,C语言练习模拟考福州大学工程技术学院.doc
  2. Web框架——Flask系列之数据库迁移(二十)
  3. LeetCode 474. Ones and Zeroes 动态规划解法+拓展
  4. LeetCode 1799. N 次操作后的最大分数和(回溯 / 状态压缩DP)
  5. [scikit-learn 机器学习] 2. 简单线性回归
  6. LeetCode 1305. 两棵二叉搜索树中的所有元素(二叉树迭代器)
  7. mysql1033错误存储引擎_MySQL Innodb存储引擎因为缓存配置出现的错误
  8. python类中变量作用域_Python中的变量作用域
  9. php中写salt,请快速检查这个PHP+SALT实现-不工作?
  10. java toast_Android中Toast的用法简介