安泽网站建设,网站推广的工作内容,互动网站欣赏,彩票网站开发制作模版1 缘起
项目中使用了第三方的服务#xff0c; 第三方服务偶尔会出现不稳定、连接不上的情况#xff0c; 于是#xff0c;在调用时为了保证服务的相对高可用#xff0c;添加了超时连接重试#xff0c; 当连接第三方服务超时时#xff0c;多重试几次#xff0c;比如3次 第三方服务偶尔会出现不稳定、连接不上的情况 于是在调用时为了保证服务的相对高可用添加了超时连接重试 当连接第三方服务超时时多重试几次比如3次三次后仍连接不上抛出异常 在实际的测试过程中重试一次即可连接到第三方服务 提高了服务的可用性。
2 spring-retry
Spring提供了重试项目spring-retry用于处理项目中需要重试的方法 spring-retry中提供了自定义参数如重试次数、指定重试情况、重试延迟时间等 满足不同的重试场景。
2.1 小插曲试错过程
搜索SpringBoot如何使用重试注解时发现需要使用spring-retry这个项目在Maven仓库搜索了一下spring-retry发现有多个版本如下图选择了最新版本2.0.4启动项目时发现无法运行。 环境 Java8 SpringBoot2.4.5
!-- https://mvnrepository.com/artifact/org.springframework.retry/spring-retry --
dependencygroupIdorg.springframework.retry/groupIdartifactIdspring-retry/artifactIdversion2.0.4/version
/dependency异常信息如下版本不一致进入spring-retry项目查看项目配置。 java: 无法访问org.springframework.retry.annotation.Backoff 错误的类文件: /D:/install/maven/apache-maven-3.8.8/my-repository/org/springframework/retry/spring-retry/2.0.4/spring-retry-2.0.4.jar!/org/springframework/retry/annotation/Backoff.class 类文件具有错误的版本 61.0, 应为 52.0 请删除该文件或确保该文件位于正确的类路径子目录中。
查看spring-retry项目的配置文件发现java版本为17所以使用java8无法启动项目 因此需要选择spring-retry对应Java8的版本。
2.2 正确过程
2.2.1 配置依赖
不指定spring-retry版本Maven会自动下载合适的版本本次自动下载的版本为1.3.1。
!-- https://mvnrepository.com/artifact/org.springframework.retry/spring-retry --
dependencygroupIdorg.springframework.retry/groupIdartifactIdspring-retry/artifactId
/dependency2.2.2 重试注解Retryable
为方法添加Retryable注解即可在方法遇到异常时重试指定次数。
常用参数如下如有其他开发需求可继续查看源码中的其他参数。
序号参数描述1value触发重试的异常情况2maxAttempts最大重试次数默认重试3次3backoff补偿机制delay重试延迟时间单位毫秒multiplier延迟时间比例延迟的具体时间为delay*multipliermultiplier0时生效默认multiplier为0当multiplier为0时延迟时间即为delay
2.2.3 添加启动注解EnableRetry
启动类中添加开启重试注解EnableRetry 配置样例如下 启动重试EnableRetry后Spring会全局启动重试注解Retryable在执行重试方法时通过CGLIB代理方法根据注解的元数据进行重试EnableRetry源码如下 org.springframework.retry.annotation.EnableRetry
2.2.4 测试重试 重试结果 重试参数5次延迟2秒比例2 重试间隔 第二次第一次~第二次2秒 第三次第二次~第三次2 * 24秒 第四次第三次~第四次4 * 28秒 第五次第四次~第五次8 * 216秒
3 小结
1Spring提供重试项目spring-retry支持自定义参数如重试次数、指定重试情况、重试延迟时间等满足不同的重试场景 2spring-retry生效有两处配置启动配置EnableRetry重试配置Retryable 3延迟时间第n次~第n1次 第n次delay*multiplier上一次的dealy与比例的乘积; 4使用spring-retry时需要注意与Java版本的匹配不同的Java版本使用不同的spring-retry版本以及不同的重试参数。