这里指已经在 Eureka 注册中心注册的服务,如果需要停用,有四种方式进行停用。

1.直接关闭

最粗暴。
写这个是因为,直接关闭,如果 Eureka 开了保护模式,会导至服务已关闭,但是未下线,还是会重试调用。如果不需强稳定性的话可以这么干。

2.客户端主动通知注册中心下线

安全。
Eureka注册中心在收到某个客户端下线后不会马上通知所有的注册的客户端,而是等到客户端进行心跳的时候(心跳(续约)频率,默认30秒 )再将下的数据返回。通过这种方式下线的话,可以在某个服务下线后防止其他服务调用此服务失败。

白话就是,服务状态下线了,但是不通知其他服务。等到续约时间到了,再通知所有注册服务。

猜测,服务下线后,在没有心跳前,其他服务还是可以进行调用。等到心跳后,通知所有服务已下线,其他服务认为已下线,就不会再调该下线服务。

1
2
3
4
5
6
7
8
   @Autowired
   private DiscoveryClient client;
   @ResponseBody
   @GetMapping("/eurekaUnRegister")
   public String shutDown() {
       eurekaClient.shutdown();
       return "eurekaUnRegistering";
   }

1
2
3
4
@RequestMapping(value = "/offline", method = RequestMethod.GET)
 public void offLine(){
   DiscoveryManager.getInstance().shutdownComponent();
 }  

3.调用接口方式下线

http://10.168.62.58:9999/message/actuator/shutdown

返回结果

1
2
3
{
   "message": "Shutting down, bye..."
}

本地起机器后,调试结果
结果就是服务线程关闭,服务停止:

1
2
3
4
5
6
7
Stopping beans in phase 2147483647
Stopping beans in phase 0
Unregistering JMX-exposed beans on shutdown
DiscoveryClient_GROUP-MESSAGE/group-message-provider-704 - registration status: 204
Shutting down DiscoveryClient ...
Unregistering ...
DiscoveryClient_GROUP-MESSAGE/group-message-provider-704 - deregister  status: 200

网上博客https://blog.csdn.net/memmsc/article/details/78122962

4.修改服务状态

这种方式,服务不会停止,只是状态变为 DOWN,适合禁用该服务的操作。
DOWN 禁用
UP 启用
http://10.168.62.58:9999/message/actuator/service-registry

1
2
3
{
       "status": "UP"
}

sprinng boot 2.0 以上需要添加额外配置才能生效,否则报404

1
2
3
4
5
6
7
8
management:
endpoints:
web:
exposure:
include: "*" #包含的路径,可以单个如 info
endpoint:
shutdown:
enabled: true #开启shutdown 关闭