springboot集成spring-retry实现接口重试

ゝ一世哀愁。 2023-07-15 13:19 76阅读 0赞

今天需要通过http接口推送数据,根据协议接口失败情况下,需要重试3次。

springboot 版本1.5,

1.maven依赖

  1. <dependency>
  2. <groupId>org.springframework.retry</groupId>
  3. <artifactId>spring-retry</artifactI
  4. </dependency>
  5. <dependency>
  6. <groupId>org.aspectj</groupId>
  7. <artifactId>aspectjweaver</artifactId>
  8. </dependency>

2.springboot启动类 启动重试 ,添加 @EnableRetry 注解

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2d1YW5neWluZ3Bvc3Vv_size_16_color_FFFFFF_t_70

3.在需要重试的方法上添加注解 @Retryable

  1. @Retryable(value = {Exception.class}, maxAttempts = 3, backoff = @Backoff(delay = 1000L, multiplier = 1))
  2. public boolean httpPushRetry(String url, String body) throws Exception {
  3. String result = HttpUtils.goddHttpPost(url, body);
  4. logger.warn("**传输内容:{},返回结果:{}", body, result);
  5. AntResponseDto dto = JSONObject.parseObject(result, AntResponseDto.class);
  6. if (dto == null) {
  7. throw new Exception("");
  8. }
  9. Boolean success = dto.getSuccess();
  10. Integer status = dto.getStatus();
  11. if (success && status == 0) {
  12. return true;
  13. }
  14. throw new Exception("返回值为失败:" + dto);
  15. }

4、重试次数超过规定次数,调用回调方法 @Recover

  1. /**
  2. * 达到最大重试次数,或抛出了一个没有指定进行重试的异常
  3. * recover 机制
  4. *
  5. * @param e 异常
  6. */
  7. @Recover
  8. public boolean recover(Exception e, String param) {
  9. logger.error("达到最大重试次数,或抛出了一个没有指定进行重试的异常:", e);
  10. return false;
  11. }

@Retryable(value = {Exception.class}, maxAttempts = 3, backoff = @Backoff(delay = 1000L, multiplier = 1))

value :需要重试的异常种类

maxAttempts :重试次数

delay :重试间隔时间 delay = 1000L 为1秒

multiplier = 1:间隔时间倍数

发表评论

表情:
评论列表 (有 0 条评论,76人围观)

还没有评论,来说两句吧...

相关阅读

    相关 集成spring策略

    最近在做服务端需求,涉及到重试场景。重试有很多注意的点。比如:方法兜底,指数退避策略等等。如果自己实现的话,需要注意的点很多。spring提供了重试解决方案spring ret