栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

有关重试功能的用法

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

有关重试功能的用法

在最近的项目中访问第三方接口的时候,由于公司经费有限,密钥在获取的时候在环境上出现了冲突(即生产环境和测试环境共用一个app密钥,在获取请求密钥的时候生产环境和测试环境出现不断被对方刷新掉的情况)(一般情况下不会出现这种情况,会每一套环境都会有一个属于他自己的app密钥),这种情况下我们需要进行一个 刷新重试的机制(当某个环境上的密钥被刷新掉之后,再次访问的时候如果出现错误,进行一个刷新重试的机制),目前我了解到两种方式:

1>通过死循环的方式(切记这种方式一定要给出一个退出机制,否则你的程序将挂掉):比如你可以设置一个计数器,当他达到相应的次数之后就结束循环或者抛出异常之类的

2>通过spring自己集成的重试框架(spring-retry):

用法如下:通过注解@Retryable

@Retryable(value = {xxxException.class}, maxAttempts = 5)

其中value属性代表着在执行方法的过程中碰到那些异常需要重试(是一个集合),maxAttempts代表着最大的重试次数

特别注意的地方是:被@Retryable标注的方法不能通过内嵌的方式进行调用,所以最好专门定义一个类来写此方法

另外如果达到最大重试次数我们可以通过@Recover注解来修饰一个回调函数

@Recover
public 返回值类型 recover(xxxException e) {
    log.error("由于达到重试次.......失败");
    throw new xxxException("xxxxx");
}

注意的是该方法的返回值必须和@Retryable注解修饰的重试方法的返回值类型一致,否则将不能触发函数的回调,也有可能直接报错.

另外该回调函数的入参必须和@Retryable的value属性一致

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/315014.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号