优雅停机

让 Dubbo 服务完成优雅关闭

功能描述

优雅关闭是指服务实例能够安全平稳地停止,不会影响正在进行的业务。一个 Dubbo 服务既可以是服务提供者,也可以是服务消费者。当服务停止时

  1. 消费者将不再请求已停止的服务实例
  2. 服务实例正在处理的请求可以正常处理

使用场景

  1. 使用 kill PID 停止服务
  2. 通过 SpringBoot Actuator 的 /shutdown 停止服务

Dubbo 3.0 及以上版本支持不同类型的 Java 应用程序,包括 SpringBoot 应用程序、Spring 应用程序和非 Spring 应用程序。

如何使用

设置优雅关闭超时时间,默认超时时间为 10 秒,如果超时则会强制关闭。此参数可以在 dubbo.properties 文件中配置,例如:30 秒。

# Stop service waiting time, unit: milliseconds
dubbo.service.shutdown.wait=30000

注意事项

  1. Dubbo 使用 JDK 的 ShutdownHook 来完成优雅关闭,所以如果用户使用 kill -9 PID 等强制关闭命令,则不会执行优雅关闭,只有在 kill PID 时才会执行。

  2. 验证 Dubbo 的 ShutdownHook 是否执行。您可以在日志文件中找到关键字:Run shutdown hook now.

  3. 如果使用 Spring,请升级到 4.2 及以上版本,建议使用 5 及以上版本

  4. 如果使用 SpringBoot,Dubbo 的 ShutdownHook 会在 SpringBoot 的 ShutdownHook 之前执行,如果您使用 SpringBoot 2.3 及以上版本,建议与 SpringBoot 的优雅关闭一起使用,并在配置文件 application.yml 中配置

server:
  shutdown: graceful
  1. 如果 ShutdownHook 不生效,您可以根据具体场景自行调用
ApplicationModel.defaultModel().destroy();

上次修改时间 2023 年 1 月 2 日:增强 en 文档 (#1798) (95a9f4f6c1c)