写作网站哪个好用苏州网站建设 苏州网络推广专家

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

写作网站哪个好用,苏州网站建设 苏州网络推广专家,4a广告公司排名,事业单位做网站需要前置审批吗更多SpringBoot3内容请关注我的专栏#xff1a;《SpringBoot3》 期待您的点赞#x1f44d;收藏⭐评论✍ 重学SpringBoot3-怎样优雅停机 1. 什么是优雅停机#xff1f;2. Spring Boot 3 优雅停机的配置3. Tomcat 和 Reactor Netty 的优雅停机机制3.1 Tomcat 优雅停机3.2 Reac… 更多SpringBoot3内容请关注我的专栏《SpringBoot3》 期待您的点赞收藏⭐评论✍ 重学SpringBoot3-怎样优雅停机 1. 什么是优雅停机2. Spring Boot 3 优雅停机的配置3. Tomcat 和 Reactor Netty 的优雅停机机制3.1 Tomcat 优雅停机3.2 Reactor Netty 优雅停机 4. 优雅停机的流程5. 实现优雅停机的完整示例5.1 代码示例5.2 IDEA 停止服务5.3 测试优雅停机 6. 负载均衡器中的停机策略7. 优雅停机的注意事项8. 总结 在现代微服务架构中优雅停机Graceful Shutdown是一项重要功能可以确保服务在关闭时处理完所有当前请求避免突然终止连接或丢失数据。Spring Boot 3 提供了对优雅停机的内置支持允许在关闭应用程序上下文期间为现有请求设置一个宽限期同时防止新请求进入。本文将详细介绍 Spring Boot 3 的优雅停机机制重点分析 Tomcat 和 Reactor Netty 两种常用的嵌入式 Web 服务器的优雅停机流程。

  1. 什么是优雅停机 优雅停机的目标是在服务关闭时 允许当前的处理请求在指定的宽限期内完成。阻止新的请求进入。向外部监控或负载均衡器标记服务为不可用。 这种机制可以确保服务在维护或版本升级时避免数据丢失和请求中断提供更高的稳定性和可用性。
  2. Spring Boot 3 优雅停机的配置 在 Spring Boot 3 中我们可以使用 server.shutdown 配置来开启优雅停机并指定宽限期。配置项如下 server:shutdown: graceful # 开启优雅停机 spring:lifecycle:timeout-per-shutdown-phase: 20s # 停机的宽限期默认为 30 秒此配置项适用于所有四种嵌入式 Web 服务器Tomcat、Jetty、Reactor Netty 和 Undertow。 注意Spring Boot 3 默认禁用优雅停机需要将 server.shutdown 设置为 graceful 以启用。 3. Tomcat 和 Reactor Netty 的优雅停机机制 Spring Boot 3 支持在不同的 Web 服务器上实现优雅停机。以下是 Tomcat 和 Reactor Netty 的具体停机方式 3.1 Tomcat 优雅停机 使用Tomcat的优雅关机需要Tomcat 9.0.33或更高版本在 Tomcat 上启用优雅停机后当收到关闭信号时它将停止接受新的连接请求并在网络层阻止传入流量 阻止新请求一旦启动关闭流程Tomcat 将在网络层拒绝新的请求连接。完成现有请求Tomcat 会确保已有请求在指定的宽限期内完成。如果请求未完成且宽限期到达将强制终止。 注意若某些请求未在宽限期内完成则这些请求将被中断。 3.2 Reactor Netty 优雅停机 Reactor Netty 是 Spring WebFlux 默认使用的非阻塞式 Web 服务器适合响应式编程。Reactor Netty 的优雅停机实现方式如下 网络层停止当关闭信号到达Reactor Netty 将停止接受新请求连接并释放相关资源。等待宽限期当前所有活动请求在宽限期内继续处理在宽限期结束后未完成的请求将被强制中止。 Reactor Netty 在优雅停机期间通过停止接受新的连接来实现无缝停机。其无阻塞模型让服务在短时间内完成停机。
  3. 优雅停机的流程 在 Tomcat 和 Reactor Netty 上的优雅停机流程类似大致包含以下几个步骤 标记服务不可用停止接收新的请求通常是通过在负载均衡器中剔除该服务或在网络层阻断连接来实现。设置宽限期当前请求允许在宽限期内继续处理。关闭活动连接宽限期结束后所有未完成的请求会被中止资源释放。 Spring Boot 3 的 SmartLifecycle 和 ApplicationContext 控制器在关闭阶段对生命周期进行管理保证所有组件按照顺序优雅停止。
  4. 实现优雅停机的完整示例 我们可以创建一个简单的 Spring Boot 3 应用来展示优雅停机配置。 5.1 代码示例 在 application.yml 中启用优雅停机并设置宽限期为 30 秒 server:shutdown: graceful # 开启优雅停机 spring:lifecycle:timeout-per-shutdown-phase: 30s # 停机的宽限期默认为 30 秒创建一个简单的 REST 控制器模拟一个处理时间较长的请求 RestController RequestMapping(/api) public class DemoController {GetMapping(/long-running)public String longRunningTask() throws InterruptedException {System.out.println(开始执行耗时任务…);Thread.sleep(20000); // 模拟耗时任务return 任务完成;} }此控制器会等待 20 秒后返回结果。通过优雅停机机制即使应用关闭也会允许该任务在 30 秒宽限期内完成。 启动类里添加一段代码方便打印服务何时停止运行 PreDestroypublic void destroy() {System.out.println(Application is destroyed);}5.2 IDEA 停止服务 由于 IDEA 运行的服务点击红点结束会直接停止程序无法模拟停机Linux 上通过 java -jar 运行的程序没有这种烦恼所有此处引入 actuator 的功能它可以执行 shutdown。 dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-actuator/artifactId/dependency增加如下 actuator 配置 management:endpoints:web:exposure:include: *endpoint:shutdown:enabled: true # 开放停机端口调用 curl -X POST http://localhost:8080/actuator/shutdown即可停止服务 5.3 测试优雅停机 启动应用并访问 http://localhost:8080/api/long-running然后调用 http://localhost:8080/actuator/shutdown 停止服务。 请求在宽限期内返回 任务完成。 修改超期时间为 10s超过宽限期后请求被中止。 6. 负载均衡器中的停机策略 在实际应用中负载均衡器如 Nginx、Kubernetes也可以在服务停机时配合优雅停机流程通过从负载均衡池中剔除当前实例来防止新流量进入。这样可以确保所有请求被其他实例接管而当前实例只处理已有请求直至完成后停机。
  5. 优雅停机的注意事项 宽限期配置设置合理的宽限期确保长时间请求可以完成。负载均衡器协作在生产环境中建议与负载均衡器配合实现完整的优雅停机流程。避免频繁停机频繁停机会中断长时间任务应避免在高负载时频繁重启应用。
  6. 总结 在 Spring Boot 3 中通过简单配置即可实现优雅停机确保服务在关闭时能够完整处理当前请求减少对用户体验的影响。在 Tomcat 和 Reactor Netty 上实现的优雅停机过程相似都采用了在网络层阻止新请求和在应用层设置宽限期的方式。优雅停机机制在高并发服务中显得尤为重要是微服务架构中保持稳定性和一致性的关键。