本文會介紹幾種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();
例子如下,
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
@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(); } } |
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。
原文鏈接:https://blog.csdn.net/sinat_25596967/article/details/80231669