細說Springcloud eureka的幾種主動下線服務(wù)的方式
本文會介紹幾種eureka 注冊中心服務(wù)下線的方式
補充:在啟動eureka服務(wù)的時候發(fā)現(xiàn)控制臺有以下的輸出
由此猜想可以通過改接口下線服務(wù), 于是嘗試了一下
果然能從注冊中心中移除該實例
1. 直接停掉服務(wù)。
默認情況下,如果Eureka Server在90秒沒有收到Eureka客戶的續(xù)約,它會將實例從其注冊表中刪除。但這種做法的不好之處在于, 客戶端已經(jīng)停止了運行,但仍然在注冊中心的列表中。 雖然通過一定的負載均衡策略或使用熔斷器可以讓服務(wù)正常進行,但有沒有方法讓注冊中心馬上知道服務(wù)已經(jīng)下線呢?
2.為了讓注冊中心馬上知道服務(wù)要下線, 可以向eureka 注冊中心發(fā)送delete 請求
格式為 /eureka/apps/{application.name}/
下面是下線一個hello-service的例子。
下圖是用postman 發(fā)送delete請求
值得注意的是,Eureka客戶端每隔一段時間(默認30秒)會發(fā)送一次心跳到注冊中心續(xù)約。如果通過這種方式下線了一個服務(wù),而沒有及時停掉的話,該服務(wù)很快又會回到服務(wù)列表中。
所以,可以先停掉服務(wù),再發(fā)送請求將其從列表中移除。
3. 客戶端主動通知注冊中心下線
如果你的eureka客戶端是是一個spring boot應(yīng)用,可以通過調(diào)用以下代碼通知注冊中心下線。
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(); } }
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
SpringBoot源碼分析之bootstrap.properties文件加載的原理
本文通過訪問看到bootstrap.properties中的信息獲取到了,同時age也被application.properties中的屬性覆蓋掉了。加載順序到底是什么?為什么會覆蓋呢?我們接下來分析下吧2021-12-12IDEA中使用Docker Compose容器編排的實現(xiàn)
這篇文章主要介紹了IDEA中使用Docker Compose容器編排的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-07-07Java ES(Elasticsearch) 中的and 和 or 查
Elasticsearch 是一個分布式、高擴展、高實時的搜索與數(shù)據(jù)分析引擎,es中match查詢中,查詢字符串分詞后,默認是or或者的關(guān)系,這篇文章主要介紹了ES 中的and 和 or 查詢,需要的朋友可以參考下2022-11-11