eureka 的幾種主動下線服務的方式
1. 直接停掉服務。
- 默認情況下,如果Eureka Server在90秒沒有收到Eureka客戶的續約,它會將實例從其注冊表中刪除。但這種做法的不好之處在於, 客戶端已經停止了運行,但仍然在注冊中心的列表中。 雖然通過一定的負載均衡策略或使用熔斷器可以讓服務正常進行,但有沒有方法讓注冊中心馬上知道服務已經下線呢?
2.為了讓注冊中心馬上知道服務要下線, 可以向eureka 注冊中心發送delete 請求
- 格式為 /eureka/apps/{application.name}/


- 值得注意的是,Eureka客戶端每隔一段時間(默認30秒)會發送一次心跳到注冊中心續約。如果通過這種方式下線了一個服務,而沒有及時停掉的話,該服務很快又會回到服務列表中。
3. 客戶端主動通知注冊中心下線
- 如果你的eureka客戶端是是一個spring boot應用,可以通過調用以下代碼通知注冊中心下線。
@RestController
public class HelloController {
@Autowired
private DiscoveryClient client;
@RequestMapping(value = "/hello", method = RequestMethod.GET)
public String index() {
java.util.List<ServiceInstance> instances = client.getInstances("hello-service");
return "Hello World";
}
@RequestMapping(value = "/offline", method = RequestMethod.GET)
public void offLine(){
DiscoveryManager.getInstance().shutdownComponent();
}
}