当前位置: 首页 > news >正文

青岛网络营销推广如何优化关键词搜索

青岛网络营销推广,如何优化关键词搜索,贵州省建设执业资格教育促进会网站,wordpress浮动音乐更多SpringBoot3内容请关注我的专栏:《SpringBoot3》 期待您的点赞??收藏评论 重学SpringBoot3-Spring Retry实践 1. 简介2. 环境准备3. 使用方式 3.1 注解方式 基础使用自定义重试策略失败恢复机制重试和失败恢复效果注意事项 3.2 编程式使用3.3 监听重试过程 监…

更多SpringBoot3内容请关注我的专栏:《SpringBoot3》
期待您的点赞??收藏评论

重学SpringBoot3-Spring Retry实践
  • 1. 简介
  • 2. 环境准备
  • 3. 使用方式
    • 3.1 注解方式
      • 基础使用
      • 自定义重试策略
      • 失败恢复机制
      • 重试和失败恢复效果
      • 注意事项
    • 3.2 编程式使用
    • 3.3 监听重试过程
      • 监听重试效果
  • 4. 最佳实践
  • 5. 总结

1. 简介

Spring Retry是Spring生态系统中的一个重要组件,它提供了自动重试失败操作的能力。在分布式系统中,由于网络抖动、服务暂时不可用等临时性故障,重试机制显得尤为重要。本文将详细介绍如何在 SpringBoot 3 应用中集成和使用 Spring Retry。

2. 环境准备

首先在 SpringBoot 3 项目中添加必要的依赖:

<dependency><groupId>org.springframework.retry</groupId><artifactId>spring-retry</artifactId><version>2.0.5</version>
</dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-aspects</artifactId><version>6.1.13</version>
</dependency>

在启动类或配置类上添加 @EnableRetry 注解以启用重试功能:

@SpringBootApplication
@EnableRetry
public class Application {public static void main(String[] args) {SpringApplication.run(Application.class, args);}
}

3. 使用方式

3.1 注解方式

基础使用

最简单的使用方式是通过 @Retryable 注解:

@Service
public class UserService {@Retryablepublic void riskyOperation() {// 可能失败的操作}
}
自定义重试策略

可以通过 @Retryable 注解的参数来自定义重试行为:

@Service
@Slf4j
public class EmailServiceImpl implements IEmailService {@Resourceprivate JavaMailSender mailSender;@Value("${spring.mail.username}")private String from;/*** 发送简单文本邮件** @param to* @param subject* @param text*/@Override@Retryable(retryFor = MailSendException.class, maxAttempts = 3, backoff = @Backoff(delay = 1000))public void sendSimpleEmail(String to, String subject, String text) {try {SimpleMailMessage message = new SimpleMailMessage();message.setFrom(from);message.setTo(to);message.setSubject(subject);message.setText(text);mailSender.send(message);log.info("Simple email sent successfully to: {}", to);} catch (Exception e) {log.error("Failed to send simple email", e);throw new MailSendException("Failed to send email", e);}}
}

当执行发生指定异常,将会尝试进行重试,一旦达到最大尝试次数,但仍有异常发生,就会抛出 ExhaustedRetryException。重试最多可进行三次,两次重试之间的延迟时间默认为一秒。

失败恢复机制

使用 @Recover 注解定义重试失败后的恢复方法:

    /*** 发送简单文本邮件** @param to* @param subject* @param text*/@Override@Retryable(retryFor = MailSendException.class, // 指定异常类型maxAttempts = 3, // 最大重试次数backoff = @Backoff(delay = 1000) // 指定退避策略,例如延迟时间)public void sendSimpleEmail(String to, String subject, String text) {try {SimpleMailMessage message = new SimpleMailMessage();message.setFrom(from);message.setTo(to);message.setSubject(subject);message.setText(text);mailSender.send(message);log.info("Simple email sent successfully to: {}", to);} catch (Exception e) {log.error("Failed to send simple email", e.getMessage());throw new MailSendException("Failed to send email", e);}}@Recoverpublic void recover(MailSendException e, String param) {// 处理最终失败的情况log.error("Final recovery : {}", param);}
重试和失败恢复效果

重试和失败恢复效果

注意事项

注意@Recover 失效的情况:

  • @Recover 方法的参数类型与实际异常不匹配;
  • @Recover 方法的返回类型与 @Retryable 方法不一致;
  • @Recover 方法的其他参数与 @Retryable 方法参数不匹配。

3.2 编程式使用

除了注解方式,Spring Retry 还提供了 RetryTemplate 用于编程式重试:

@Configuration
public class RetryConfig {@Beanpublic RetryTemplate retryTemplate() {RetryTemplate template = new RetryTemplate();// 配置重试策略SimpleRetryPolicy retryPolicy = new SimpleRetryPolicy();retryPolicy.setMaxAttempts(3);// 配置退避策略FixedBackOffPolicy backOffPolicy = new FixedBackOffPolicy();backOffPolicy.setBackOffPeriod(1000L);template.setRetryPolicy(retryPolicy);template.setBackOffPolicy(backOffPolicy);return template;}
}

使用RetryTemplate:

@Service
public class UserService {@Autowiredprivate RetryTemplate retryTemplate;public void executeWithRetry() {retryTemplate.execute(context -> {// 需要重试的业务逻辑return null;});}
}

3.3 监听重试过程

通过实现RetryListener接口,可以监听重试的整个生命周期:

public class CustomRetryListener extends RetryListenerSupport {@Overridepublic <T, E extends Throwable> void onError(RetryContext context, RetryCallback<T, E> callback, Throwable throwable) {// 记录错误日志log.error("Retry error occurred", throwable);}@Overridepublic <T, E extends Throwable> void close(RetryContext context,RetryCallback<T, E> callback, Throwable throwable) {// 重试结束时的处理log.info("Retry completed");}
}

将监听器注册到RetryTemplate:

@Configuration
public class RetryConfig {@Beanpublic RetryTemplate retryTemplate() {RetryTemplate template = new RetryTemplate();// ... 其他配置 ...template.registerListener(new CustomRetryListener());return template;}
}
监听重试效果

监听重试过程

4. 最佳实践

  1. 明确重试场景:只对临时性故障使用重试机制,对于业务错误或永久性故障应直接失败。

  2. 设置合理的重试次数:通常3-5次即可,过多的重试可能会加重系统负担。

  3. 使用退避策略:建议使用指数退避策略(ExponentialBackOffPolicy),避免立即重试对系统造成冲击。

  4. 添加监控和日志:通过RetryListener记录重试情况,便于问题排查。

  5. 设置超时时间:避免重试过程持续时间过长。

5. 总结

Spring Retry为Spring应用提供了强大而灵活的重试机制,既可以通过注解优雅地实现重试,也可以使用RetryTemplate进行更细粒度的控制。在实际应用中,合理使用重试机制可以提高系统的健壮性和可用性。

需要注意的是,重试机制并非万能药,在使用时要根据具体场景选择合适的重试策略,并做好监控和告警,以便及时发现和处理问题。

http://www.yayakq.cn/news/107243/

相关文章:

  • 天津网站设计推荐刻关于开通网站建设的请示
  • 网站购买后如何做seo机构
  • 网站建设合同属于成功的网站应该具备哪些要素
  • 邢台做网站的价格究竟多少钱?网页视频加速器
  • 做网站 做手机app要学什么外贸网站 源码
  • 绿色农业网站模板威海做网站哪家好
  • 浙江省邮电工程建设有限公司网站wordpress迁移typecho
  • 很色h做游戏网站扁平化颜色网站
  • 住建部官方网站中小企业微信网站建设
  • 手机创建网站教程泰安人才招聘网最新招聘2023
  • 西安网站开发xamokj网站建设 维护 运营情况报告
  • 网站备案类型有哪些网上商城如何推广
  • 网站建设项目招标书外贸网站源码下载
  • 那个外贸网站做的最好制作网页界面工具
  • 泰州网站制作套餐怎么使用宝塔做网站
  • 山东平台网站建设多少钱seo整站优化技术培训
  • 沈阳大型网站设计公司已经有域名 如何建网站
  • 韩都衣舍网站建设的改进网站开发与运营
  • 东莞网站优化排名诊断电商系统的服务商
  • 闵行网站制作哪里有网站先做前端还是后台
  • 正规的网站制作与推广互联网公司网站建设ppt模板
  • 巴州建设局网站做印章的网站
  • 网站怎样恶意刷山东app网站制作
  • 大佬做的魔法少女网站企业电子商务网站建设总结
  • 怎么创一个网站秦皇岛市妇幼保健院
  • 做建站较好的网站游戏网页版点击即玩
  • 百度搜不到公司网站做网站需要知道的简单代码
  • 海口网站建设加王道下拉线上投票链接怎么做
  • 绿色资源网佛山网站seo推广推荐
  • 山西营销型网站建设天元建设集团有限公司第八分公司