优雅关闭服务下线(Jetty)
在很多时候
kill -9 pid
并不是很友好的方法,那样会将我们正在执行请求给断掉,同时eureka
中服务依旧是处于在线状态,这个时候我们可以使用官方提供的actuator
来做优雅的关闭处理
- Actuator
spring-boot-actuator
模块提供了一个监控和管理生产环境的模块,可以使用http、jmx、ssh、telnet等拉管理和监控应用。审计(Auditing)、健康(health)、数据采集(metrics gathering)会自动加入到应用里面。
- 开始
如果对Eureka
不熟悉的可以参考:一起来学SpringCloud之-注册中心(Eureka/Consul)
- battcn-cloud-discovery
pom.xml导入
eureka-server
包
1 |
<dependencies> |
application.yml 配置内容
1 |
server: |
DiscoveryApplication 主函数启动类
1 |
@SpringBootApplication |
- battcn-cloud-hello
pom.xml导入
eureka
和actuator
,注意该处不能用tomcat
(原因还没找到,用tomcat报错,有兴趣的可以自己也试试)
1 |
<dependencies> |
application.yml 配置内容
1 |
server.port: 7002 |
HelloApplication 主函数与测试方法
1 |
import org.slf4j.Logger; |
- 测试
1.分别启动battcn-cloud-discovery
和 battcn-cloud-hello
两个服务
2.GET请求访问 http://192.168.206.1:7002/h1
3.POST请求访问:http://192.168.206.1:7002/shutdown
- 日志分析
battcn-cloud-discovery
1 |
2017-08-20 11:50:38.257 INFO 6776 --- [nio-7001-exec-3] c.n.e.registry.AbstractInstanceRegistry : Registered instance BATTCN-CLOUD-HELLO/192.168.206.1:battcn-cloud-hello:7002 with status DOWN (replication=false) |
battcn-cloud-hello
1 |
2017-08-20 11:50:34.911 INFO 1304 --- [qtp161672347-19] com.battcn.HelloApplication : [当前进度] - [1] |
从上述两端日志中可以看出,当我们发送shutdown
命令的时候,会先通知eureka
做服务下线处理,防止后续请求继续获取服务列表,然后当前服务的请求会继续执行,直到处理完毕后关闭进程,有兴趣的可以自己看看org.springframework.boot.actuate.endpoint.ShutdownEndpoint
