热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

[微服务]微服务之web容器优雅升级方案

原文链接:https://www.jianshu.com/p/b5fd0f3285e7

原文链接:https://www.jianshu.com/p/b5fd0f3285e7
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

public void onApplicationEvent(ContextClosedEvent contextClosedEvent) {
HealthCheckController.status = ContainerStatus.YELLOW;
logger.info("睡眠10s,等待tengine踢出当前web服务");
try {
TimeUnit.SECONDS.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
logger.info("准备关闭容器,先关闭线程!");
this.connector.pause();
Executor executor = this.connector.getProtocolHandler().getExecutor();
if (executor instanceof ThreadPoolExecutor) {
try {
ThreadPoolExecutor threadPoolExecutor = (ThreadPoolExecutor) executor;
threadPoolExecutor.shutdown();
if (!threadPoolExecutor.awaitTermination(waitTime, TimeUnit.SECONDS)) {
logger.warn("Tomcat thread pool did not shut down gracefully within " + waitTime
+ " seconds. Proceeding with forceful shutdown");
}
} catch (InterruptedException ex) {
Thread.currentThread().interrupt();
}
}
}
}

在这里插入图片描述

public class Test {
private static Logger logger = LoggerFactory.getLogger(Test.class);
private static String url = "http://www.maple.td/check";
public static void main(String[] args) {
System.setProperty("java.net.preferIPv4Stack", "true");
ExecutorService service = Executors.newFixedThreadPool(10);
for (int i = 0; i < 2; i++) {
service.execute(() -> {
try {
execute();
} catch (InterruptedException e) {
e.printStackTrace();
}
});
}
}
private static void execute() throws InterruptedException {
int i = 0;
while (true) {
Thread.sleep(10);
i++;
try {
List<NameValuePair> pairs = new ArrayList<>(4);
ResponseResult postResult = null;
postResult = poolPost(url, pairs);
String response = postResult.getContent();
//利于展示,根据路由到的web服务ip对response以不同颜色区分打印
String sub = response.substring(response.indexOf("[") + 1, response.indexOf("]"));
//api1
if (s.equals("172.22.0.2")) {
System.err.println("response: " + response);
} else {
logger.info("response: " + response);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
private static ResponseResult poolPost(String uri, List<NameValuePair> arguments) throws Exception {
// 通过 httpclient 或者其他方式请求指定url,这里省略代码
}

在这里插入图片描述
在这里插入图片描述



推荐阅读
  • 为何Compose与Swarm之后仍有Kubernetes的诞生?
    探讨在已有Compose和Swarm的情况下,Kubernetes是如何以其独特的设计理念和技术优势脱颖而出,成为容器编排领域的领航者。 ... [详细]
  • 本文深入探讨了WPF框架下的数据验证机制,包括内置验证规则的使用、自定义验证规则的实现方法、错误信息的有效展示策略以及验证时机的选择,旨在帮助开发者构建更加健壮和用户友好的应用程序。 ... [详细]
  • 在使用 Nginx 作为服务器时,发现 Chrome 能正确从缓存中读取 CSS 和 JS 文件,而 Firefox 却无法有效利用缓存,导致加载速度显著变慢。 ... [详细]
  • 微服务优雅上下线的最佳实践
    本文介绍了微服务上下线的正确姿势,避免使用 kill -9 等粗暴手段,确保服务的稳定性和可靠性。 ... [详细]
  • 本文探讨了Python类型注解使用率低下的原因,主要归结于历史背景和投资回报率(ROI)的考量。文章不仅分析了类型注解的实际效用,还回顾了Python类型注解的发展历程。 ... [详细]
  • 本文探讨了使用普通生成函数和指数生成函数解决组合与排列问题的方法,特别是在处理特定路径计数问题时的应用。文章通过详细分析和代码实现,展示了如何高效地计算在给定条件下不相邻相同元素的排列数量。 ... [详细]
  • 本文探讨了如何利用RxJS库在AngularJS应用中实现对用户单击和拖动操作的精确区分,特别是在调整区域大小的场景下。 ... [详细]
  • 本文提供了一种有效的方法来解决当Android Studio因电脑意外重启而导致的所有import语句出现错误的问题。通过清除缓存和重建项目结构,可以快速恢复开发环境。 ... [详细]
  • 本文详细介绍了Linux系统中信号量的相关函数,包括sem_init、sem_wait、sem_post和sem_destroy,解释了它们的功能和使用方法,并提供了示例代码。 ... [详细]
  • H5技术实现经典游戏《贪吃蛇》
    本文将分享一个使用HTML5技术实现的经典小游戏——《贪吃蛇》。通过H5技术,我们将探讨如何构建这款游戏的两种主要玩法:积分闯关和无尽模式。 ... [详细]
  • Docker安全策略与管理
    本文探讨了Docker的安全挑战、核心安全特性及其管理策略,旨在帮助读者深入理解Docker安全机制,并提供实用的安全管理建议。 ... [详细]
  • 长期从事ABAP开发工作的专业人士,在面对行业新趋势时,往往需要重新审视自己的发展方向。本文探讨了几位资深专家对ABAP未来走向的看法,以及开发者应如何调整技能以适应新的技术环境。 ... [详细]
  • CSS Border 属性:solid 边框的使用详解
    本文详细介绍了如何在CSS中使用solid边框属性,包括其基本语法、应用场景及高级技巧,适合初学者和进阶用户参考。 ... [详细]
  • 使用CSS实现鼠标悬停时图片或按钮的平滑放大效果
    通过CSS技术,当鼠标悬停在图片或按钮上时,可以实现元素平滑放大的视觉效果,并可自由调整动画的持续时间。本文将详细介绍如何利用CSS实现这一功能。 ... [详细]
  • Spring Boot与Graylog集成实现微服务日志聚合与分析
    本文介绍了如何在Graylog中配置输入源,并详细说明了Spring Boot项目中集成Graylog的日志聚合和分析方法,包括logback.xml的多环境配置。 ... [详细]
author-avatar
DYongLi
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有