现在我使用的方法是:
DiscoveryManager.getInstance().shutdownComponent();
但是被标记为过时了。
还有种方法是使用 springboot-actuator 的/actuator/service-registry
这个接口。
请问,有什么更好的方法吗?
1
qwerthhusn 2020-08-14 10:17:07 +08:00
kill -15
|
2
qwerthhusn 2020-08-14 10:17:21 +08:00
不行就暴力点,kill -9
|
3
liubx OP @qwerthhusn 这样不是会访问到挂了实例吗?我这样做过,发现会有缓存。有十几秒的时间
|
5
earther01 2020-08-14 13:53:40 +08:00
我理解,eureka client 是有本地缓存的,所以不管用哪种方法通知 eureka server 某服务下线,都要等 client 的缓存失效才能防止路由到到下线服务的情况
|
6
zliea 2020-08-14 14:14:32 +08:00
curl -X POST ${manangement.service.host}${manangement.service.port}/actuator/shutdown
|
7
zliea 2020-08-14 14:16:25 +08:00
好吧,看错了,是 springcloud 。。。。。。
|
8
luzhh 2020-08-14 14:34:12 +08:00
我之前用 consul,用下面的代码可以从注册中心移除当前实例,我当时是写了个接口,请求接口从之后再 shutdown
``` private ConsulClient consulClient; private ConsulRegistration consulRegistration; @Autowired public ConsulServiceController(ConsulClient consulClient, ConsulRegistration consulRegistration) { this.consulClient = consulClient; this.consulRegistration = consulRegistration; } @RequestMapping(value = "/service/leave") public Boolean leave() { consulClient.agentServiceDeregister(consulRegistration.getInstanceId()); return true; } ``` 当然用 kill -15 效果是一样的 |
10
user9121 2020-08-14 14:56:37 +08:00
先用 service-registry 标注服务为 out_of_service 然后等待 eureka server 的缓存,eureka client 的缓存,fegin(rebbon)缓存过期(默认一共是 90 秒),然后 stop.然后部署,健康检查,没问题就继续下一台
|
11
neuliuxi 2020-08-14 15:09:19 +08:00
用 eureka 作为注册中心,下线后一定会有一个过期时间,只是时间长短的问题,所以你需要配置服务的超时、重试,甚至于熔断降级
|
12
BBCCBB 2020-08-14 15:26:31 +08:00
http://www.appblog.cn/2019/11/21/Spring%20Boot%202.0%20%E4%B9%8B%E4%BC%98%E9%9B%85%E5%81%9C%E6%9C%BA/
参考这个呢, 先从 eureka 下线, 再把 servlet 容器暂停, 等处理完剩下的请求就可以销毁了. |
13
amon 2020-08-14 15:30:59 +08:00
参考官方文档,有提供 rest 接口。
https://github.com/Netflix/eureka/wiki/Eureka-REST-operations |
14
amoyiki 2020-08-14 15:35:03 +08:00
借个楼。 我也有遇到类似这方面的,主要是 docker swarm 更新服务后有一小段时间服务不可用。
理想场景: docker health 检查正常后再注册到 eureka 上。下线时,先下线服务,等旧请求全部处理完后,eureka 下线。再隔个十几秒关闭容器。 不知道各位有没有这样的解决方案 |
16
qwerthhusn 2020-08-17 14:13:23 +08:00
不过我感觉 eureka 的取消注册实例好像不管用,即使关了自我保护模式,服务下线了,还是会请求到
|