滕王阁环境建设网站,电子商务网站安全措施,png图片可以做网站图标吗,广西住房和城乡建设官方网站场景#xff1a; 某些场景下#xff0c;如果接口出现异常需要进行重试#xff0c;例如网络抖动、调用接口超时等并非接口代码导致的报错#xff0c;此时可以进行接口重试机制 1、导入 spring retry 重试依赖 !-- spring retry --dependencygroupId…场景 某些场景下如果接口出现异常需要进行重试例如网络抖动、调用接口超时等并非接口代码导致的报错此时可以进行接口重试机制 1、导入 spring retry 重试依赖 !-- spring retry --dependencygroupIdorg.springframework.retry/groupIdartifactIdspring-retry/artifactIdversion1.3.4/version/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-aop/artifactId/dependency
因为 spring retry 是基于 aop 实现的所以还需要导入 aop 依赖 2、主启动类标注启动重试功能 EnableRetry 3、测试重试方法 Retryable(value Exception.class,maxAttempts 5,backoff Backoff(delay 1000, multiplier 2),recover recoverTestSpringRetryTwo)Overridepublic void testSpringRetry(String name, String address) throws BizException {log.info(姓名{}地址{}, name, address);//模拟报错if (StrUtil.equals(name, 张三)) {throw new BizException(出现异常);}}
参数说明 【1】Retryable标注该方法出现异常进行重试 【2】value对哪种异常进行重试 【3】maxAttempts最大重试次数默认3 【4】backoff重试策略delay 1000, multiplier 2 延迟1秒(1000毫秒)进行第一次重试后续每次延迟时间会以 multiplier 的倍数进行重试示例为1(1000毫秒)秒、2(1000*2)秒、4(2000*2)秒、8(4000*2)秒...以此类推进行重试 【5】recover最大重试次数耗尽触发此方法。有多个异常回调方法时需要用此属性指定用哪个 【6】当重试次数耗尽依然抛出异常可以通过 Recover 方法进行失败回调、拿到参数进行手工处理 4、异常重试回调方法
使用 Recover 标注重试回调方法 Recoverpublic void recoverTestSpringRetryOne(Exception e, String name, String address) {log.info(recoverTestSpringRetryOne异常重试回调方法开始执行参数为姓名{}地址{}, name, address);log.info(此时可以把此参数记录到重试异常回调表中以便后续通过定时任务调度补偿处理);log.error(异常消息{}, e.getMessage());e.printStackTrace();}Recoverpublic void recoverTestSpringRetryTwo(Exception e, String name, String address) {log.info(recoverTestSpringRetryTwo异常重试回调方法开始执行参数为姓名{}地址{}, name, address);log.info(此时可以把此参数记录到重试异常回调表中以便后续通过定时任务调度补偿处理);log.error(异常消息{}, e.getMessage());e.printStackTrace();}
注意 【1】Recover 方法的返回类型必须与 Retryable 方法的返回类型一致 【2】Recover 方法的第一个参数必须是 Throwable 类型 【3】回调方法与重试方法必须在同一个实现类中 【4】如果一个实现类中有多个异常回调方法在 Retryable 中可以使用 recover 属性指定回调的方法名 5、验证结果
c.h.m.m.t.s.impl.TestDailyServiceImpl :46 - 姓名张三地址上海
c.h.m.m.t.s.impl.TestDailyServiceImpl :46 - 姓名张三地址上海
c.h.m.m.t.s.impl.TestDailyServiceImpl :46 - 姓名张三地址上海
c.h.m.m.t.s.impl.TestDailyServiceImpl :46 - 姓名张三地址上海
c.h.m.m.t.s.impl.TestDailyServiceImpl :46 - 姓名张三地址上海
c.h.m.m.t.s.impl.TestDailyServiceImpl :63 - recoverTestSpringRetryTwo异常重试回调方法开始执行参数为姓名张三地址上海
c.h.m.m.t.s.impl.TestDailyServiceImpl :64 - 此时可以把此参数记录到重试异常回调表中以便后续通过定时任务调度补偿处理
c.h.m.m.t.s.impl.TestDailyServiceImpl :65 - 异常消息出现异常
BizException(codenull, message出现异常)at com.hkl.mpjoin.modules.testdaily.service.impl.TestDailyServiceImpl.testSpringRetry(TestDailyServiceImpl.java:49)
从结果可以看出符合重试策略的预期重试5次后依然异常失败进入失败回调方法结束