关闭springboot 但tomcat不关闭的情况下,Sentinel的监听服务(8719)还在运行, 下次启动,因为8719端口被占用,所以会启动8720端口,这样就会有两个端口运行监听服务
原提问者GitHub用户zhangxuzhuang
找到原因了,通过/shutdown的endpoint关闭应用时,因为Sentinel监听服务里有两个ExecutorService,里面的线程并未完全销毁,导致应用进程依然存活,监听服务依旧还在。
在应用里定义一个listener监听SpringContext关闭事件,里面通过CommandCenter#stop停止Sentinel监听服务试试:
@Component public class ApplicationShutDownListener implements ApplicationListener {
private static final Logger LOGGER = LoggerFactory.getLogger(ApplicationShutDownListener.class);
@Override
public void onApplicationEvent(ContextClosedEvent contextClosedEvent) {
try {
LOGGER.info("spring context closed, stop sentinel commend center");
CommandCenterProvider.getCommandCenter().stop();
} catch (Exception e) {
LOGGER.error("stop sentinel commend center error", e);
}
}
}
参考资料: springboot通过shutdown进程依然存活的问题:https://www.jianshu.com/p/7f76b8e1b6b8
原回答者GitHub用户cdfive
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
阿里云拥有国内全面的云原生产品技术以及大规模的云原生应用实践,通过全面容器化、核心技术互联网化、应用 Serverless 化三大范式,助力制造业企业高效上云,实现系统稳定、应用敏捷智能。拥抱云原生,让创新无处不在。