停止应用
1 Web应用将HTTP流量切走
如果是Web应用,需要先借助工具或者命令,将登记在Nginx中的转发信息临时移除,确保不再有新的流量来访问将要停止的应用。
2 触发停止应用的通知
2.1 方式1-执行kill -2
发送进程停止信号,Java应用中通过Runtime.getRuntime().addShutdownHook注册回调,用于运行在进程退出前需要执行的逻辑。由于addShutdownHook可以注册多个回调,调用顺序并不明确,所以不是最佳方案,仅供参考。
2.2 方式2-通过访问指定url触发停止应用的操作
将应用改造为SpringBoot方式的应用,内置启动触发shutdown的EndPoint,其实就是提供一个指定的url,通过curl命令访问该url,然后在代码中运行在进程退出之前需要执行的逻辑。不是SpringBoot方式,只要是Web应用都可以这样做,注意这个url应该限制允许本地127.0.0.1的ip访问,且需要加上账号密码的鉴权限制,建议也限制仅允许POST方式访问。
举个例子,执行停止进程之前操作
output=$(curl -vvv -u ${USER}:${PASS} -X POST http://127.0.0.1:${SYS_PORT}${CONTEXT_PATH}/actuator/shutdown
echo "response is ${output}"