1. 程式人生 > >細說Spring cloud ——eureka 的幾種主動下線服務的方式

細說Spring cloud ——eureka 的幾種主動下線服務的方式

本文會介紹幾種eureka 註冊中心服務下線的方式

-----------------------------------------------------------------

補充:在啟動eureka服務的時候發現控制檯有以下的輸出


由此猜想可以通過改介面下線服務, 於是嘗試了一下


果然能從註冊中心中移除該例項


---------------------------------------------------------------------

1. 直接停掉服務。

預設情況下,如果Eureka Server在90秒沒有收到Eureka客戶的續約,它會將例項從其登錄檔中刪除。但這種做法的不好之處在於, 客戶端已經停止了執行,但仍然在註冊中心的列表中。 雖然通過一定的負載均衡策略或使用熔斷器可以讓服務正常進行,但有沒有方法讓註冊中心馬上知道服務已經下線呢? 

2.為了讓註冊中心馬上知道服務要下線, 可以向eureka 註冊中心傳送delete 請求

格式為 /eureka/apps/{application.name}/

下面是下線一個hello-service的例子。 


下圖是用postman 傳送delete請求


值得注意的是,Eureka客戶端每隔一段時間(預設30秒)會發送一次心跳到註冊中心續約。如果通過這種方式下線了一個服務,而沒有及時停掉的話,該服務很快又會回到服務列表中。

所以,可以先停掉服務,再發送請求將其從列表中移除。

3. 客戶端主動通知註冊中心下線 

如果你的eureka客戶端是是一個spring boot應用,可以通過呼叫以下程式碼通知註冊中心下線。 

DiscoveryManager.getInstance().shutdownComponent();

例子如下,

@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();
    }   
}