优雅停机
让 Dubbo 服务完成优雅关闭
功能描述
优雅关闭是指服务实例能够安全平稳地停止,不会影响正在进行的业务。一个 Dubbo 服务既可以是服务提供者,也可以是服务消费者。当服务停止时
- 消费者将不再请求已停止的服务实例
- 服务实例正在处理的请求可以正常处理
使用场景
- 使用
kill PID
停止服务 - 通过 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
注意事项
Dubbo 使用 JDK 的 ShutdownHook 来完成优雅关闭,所以如果用户使用
kill -9 PID
等强制关闭命令,则不会执行优雅关闭,只有在kill PID
时才会执行。验证 Dubbo 的 ShutdownHook 是否执行。您可以在日志文件中找到关键字:
Run shutdown hook now.
如果使用 Spring,请升级到 4.2 及以上版本,建议使用 5 及以上版本
如果使用 SpringBoot,Dubbo 的 ShutdownHook 会在 SpringBoot 的 ShutdownHook 之前执行,如果您使用 SpringBoot 2.3 及以上版本,建议与 SpringBoot 的优雅关闭一起使用,并在配置文件 application.yml 中配置
server:
shutdown: graceful
- 如果 ShutdownHook 不生效,您可以根据具体场景自行调用
ApplicationModel.defaultModel().destroy();
上次修改时间 2023 年 1 月 2 日:增强 en 文档 (#1798) (95a9f4f6c1c)