spring boot + Eureka如何平滑上下线服务
目录
“ 系统正常运行,如果要新发版程序,如何保证程序平滑上线,不影响前端的请求?使用Eureka作为注册中心时,会有哪些地方会导致新服务上下线延迟?如何优化并解决服务的正常上下线?”
技术版本信息:
spring-boot-starter-parent-2.2.4-RELEASE
spring-boot-starter-web-2.2.4-RELEASE
spring-boot-starter-undertow-2.2.4-RELEASE
spring-cloud-starter-netflix-eureka-server-2.2.1.RELEASE
spring-cloud-starter-netflix-eureka-client-2.2.1.RELEASE
spring-boot-starter-openfeign-2.2.1-RELEASE
spring-cloud.version-Hoxton.SR1
服务平滑上下线-单机版
场景描述:
对于传统的单机JAVA WEB程序部署新的服务,就是停止当前的服务,然后部署新的服务,这样的操作会导致一个问题,就是在旧服务下线前,新服务上线前的这段时间,服务是不可用的,而且在服务下线前,如果当前还有请求没有执行完毕,也有可能会被异常中止。
可能有些同学会想到,部署多个服务在一个SLB下,暴露SLB供前端调用,这样后端就可以部署好了新的服务之后,然后在停掉旧的服务。这个解决办法,的确可以保证服务的上下线之间的时差为0,但是这个办法还不能解决当前旧服务还有部分请求没有执行完毕,就被中止的问题。
对于上述问题,还有些聪明的同学会思考到,是不是可以监控容器中是否还有请求的方式,保证容器中所有请求都执行完毕之后,在执行服务停止呢?
答案,当然是可以的。那具体如何操作呢?接下来就以undewtow容器作为例子给大家演示一下监听方法。
解决方案:
1、引入undertow容器pom文件,这里需要去掉web自带的tomcat容器
<!-- 移除掉默认支持的 Tomcat -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>2.2.4.RELEASE</version>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- 添加 undertow --